[说明]
函数sort(NODE*head)的功能是:用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻节点中的元素,若较小的元素在后面,则交换这两个节点中的元素值。其中,head指向链表的头节点。排序时,为了避免每趟都扫描到链表的尾节点,设置一个指针endptr,使其指向下趟扫描需要到达的最后一个节点。例如,对于图8-25(a)所示的链表进行一趟冒泡排序后,得到图8-25(b)所示的链表。
链表的节点类型定义如下:
typedef Struet Node
int data;
struct Node *next;
NODE;
[C语言函数]
void sort(NODE *head)
NODE *ptr, *preptr, *endptr;
int tempdata;
ptr=head->next;
while (1) /*查找表尾节点*/
ptr=ptr->next;
endptr=ptr; /*令endptr指向表尾节点*/
ptr= (2) ;
while(ptr!=endptr)
while( (3) )
if(ptr->data>ptr->next->data)
tempdata=ptr->data; /*交换相邻节点的数据*/
ptr->data=ptr->next->data;
ptr->next->data=tempdata;
preptr= (4) ;ptr=ptr->next;
endptr= (5) ; ptr=head->next;
(2)处填()
使用VC6打开考生文件夹下的工程test34_1,此工程包含一个源程序文件test34_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为:
David 3123 1000
源程序文件test34_1.cpp清单如下:
#include <iostream.h>
#include <string.h>
class person
public:
char name[20];
unsigned long id;
float salary;
void print( )cout<<name<<’ ’<<id<<’ ’<<salary<<
/***************** found *****************/
void main( )
person p;
person *ptr;
/***************** found *****************/
ptr=p;
/***************** found *****************/
strcpy("David",ptr->name);
ptr->id=3123;
ptr->salary=1000;
ptr->print( );
(A)错误:}
正确:};
(B)错误:ptr=p;
正确:ptr=&p;
(C)错误:strcpy("David",ptr>name);
正确:strcpy(ptr->name,"David");
对于下面定义的类MyClass,在函数f( )中将对象成员n的值修改为50的语句应该是( )。
class MyClass
public:
MyClass(int x) n=x;
void SetNum(int n1) n=n1;
private:
int n;
int f( )
MyClass *ptr=new MyClass(45);
A:MyClass(50) B:SetNum(50) C:C. ptr->SetNum(50) D:D. ptr->n=50
main函数中发生编译错误的语句是______。
#include<iostream.h>
class A
{
public:
int a;
const int b;
A( ):a(10),b(20){}
void fun( )const
{
cout<<"a="<<a<<"/tb="<<b<<endl;
}
};
void main( )
{
A obj1;
const A*ptr=new A;
ptr=&obj1;
ptr->a=100;
ptr->fun( );
}
ptr->a=100;
有如下程序:
#include
using namespace std;
class Base{
public:
void output( ){cout<output( );
ptr->Print( );
delete ptr;
return 0;
)
程序的输出结果是
A:IB B:iD C:2B D:2D
对于下面定义的类MyClass,在函数f( )中将对象成员n的值修改为50的语句应该是( )。
class MyClass
{
public:
MyClass(int x) {n=x;}
void SetNum(int n1) {n=n1;}
private:
int n;
}
int f( )
{
MyClass *ptr=new MyClass(45);
}
A:MyClass(50) B:SetNum(50)
C. ptr->SetNum(50) D. ptr->n=50
有如下程序: #include <iostream> using namespace std; class Base { public: void output( ) { cout<<1; } virtual void Print( ) { cout<<’B’; } }; class Derived: public Base { public: void output( ) { cout<<2; } void Print( ) { cout<<’D’; } }; int main( ) { Base *ptr=new Derived; ptr->output( ); ptr->Print( ); delete ptr; return ( ); }程序的输出结果是
A:1B B:1D C:2B D:2D