求教一个问题,搞了半天不定.
钱能C++程序设计教程 练习10.6:
建立一个10结点的单向链表,每个结点包括:学号,姓名,性别,年龄.对其进行排序,采用插入排序法,按学号从小到大排列.
我鼓搞半天不定的代码如下:
(运行是个死循环...为了输入方便点,只要求输入学号,输出也只输出学号.感觉只有排序函数myisort有错误,没办法了)
#include <iostream.h>
#include <stdlib.h>
const int size=10;
struct Lnode
{
int number;
char name[20];
char sex[10]; //male and female
int age;
Lnode* next;
};
Lnode* create() ;
void print(Lnode* head);
void myisort(Lnode*& head,const int size);
int Listlen(Lnode* head);
void main()
{
int len;
Lnode* head=create();
len=Listlen(head);
cout <<"the length of the list is: "
<<len
<<endl <<endl;
print(head);
myisort(head,size);
print(head);
}
Lnode* create()
{
Lnode* head=NULL;
Lnode* pEnd;
Lnode* pS;
pS=new Lnode;
pEnd=pS;
cout <<"please input a number: \n";
cin >>pS->number;
cout <<endl<<endl;
while(pS->number) //looping, until pS->number is zero
{
if(head == NULL)
head=pS;
pEnd->next=pS;
pEnd=pEnd->next;
pS=new Lnode;
cout <<"please input a number: \n";
cin >>pS->number;
cout <<endl<<endl;
}
pEnd->next=NULL;
return head;
}
void print(Lnode* head)
{
Lnode* tmp=head;
if (head == NULL)
cerr <<"\nerror! the is a empty list! \n\n";
while(head)
{
cout <<head->number <<",";
head=head->next;
}
head=tmp;
cout <<endl;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void myisort(Lnode*& head,const int size)
{
Lnode* Guard_inserter;
Lnode* inserter;
Lnode* Guard_index;
Lnode* index;
int n;
for(int i=size;i>1;i--)
{
n=i-1;
Guard_inserter = inserter = Guard_index = index = head;
cout <<n <<endl;
while(n>0) //定位本轮比较的指针
{
if(i!=2)
{
Guard_index=index;
index=index->next;
Guard_inserter=inserter;
inserter=Guard_index;
n--;
}
else
{
Guard_index=index;
index=index->next;
n--;
}
}
cout <<n <<endl;
while(index && inserter->number < index->number) //查找插入点
{
Guard_index=index;
index=index->next;
}
if(i!=2) //插入:inserter本身在非链首和链首
{
Guard_inserter=inserter->next; //inserter 脱链
inserter->next=Guard_index->next;
Guard_index->next=inserter;
}
else
{
if(Guard_index != inserter)
{
head = inserter->next;
inserter->next = Guard_index->next;
Guard_index->next = inserter;
}
else
{
head = inserter->next;
inserter->next = index->next;
head->next = inserter;
}
}
}//end for
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>...
int Listlen(Lnode* head)
{
int i=0;
Lnode* tmp=head;
while(head)
{
i++;
head=head->next;
}
head=tmp;
return i;
}
建立一个10结点的单向链表,每个结点包括:学号,姓名,性别,年龄.对其进行排序,采用插入排序法,按学号从小到大排列.
我鼓搞半天不定的代码如下:
(运行是个死循环...为了输入方便点,只要求输入学号,输出也只输出学号.感觉只有排序函数myisort有错误,没办法了)
#include <iostream.h>
#include <stdlib.h>
const int size=10;
struct Lnode
{
int number;
char name[20];
char sex[10]; //male and female
int age;
Lnode* next;
};
Lnode* create() ;
void print(Lnode* head);
void myisort(Lnode*& head,const int size);
int Listlen(Lnode* head);
void main()
{
int len;
Lnode* head=create();
len=Listlen(head);
cout <<"the length of the list is: "
<<len
<<endl <<endl;
print(head);
myisort(head,size);
print(head);
}
Lnode* create()
{
Lnode* head=NULL;
Lnode* pEnd;
Lnode* pS;
pS=new Lnode;
pEnd=pS;
cout <<"please input a number: \n";
cin >>pS->number;
cout <<endl<<endl;
while(pS->number) //looping, until pS->number is zero
{
if(head == NULL)
head=pS;
pEnd->next=pS;
pEnd=pEnd->next;
pS=new Lnode;
cout <<"please input a number: \n";
cin >>pS->number;
cout <<endl<<endl;
}
pEnd->next=NULL;
return head;
}
void print(Lnode* head)
{
Lnode* tmp=head;
if (head == NULL)
cerr <<"\nerror! the is a empty list! \n\n";
while(head)
{
cout <<head->number <<",";
head=head->next;
}
head=tmp;
cout <<endl;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void myisort(Lnode*& head,const int size)
{
Lnode* Guard_inserter;
Lnode* inserter;
Lnode* Guard_index;
Lnode* index;
int n;
for(int i=size;i>1;i--)
{
n=i-1;
Guard_inserter = inserter = Guard_index = index = head;
cout <<n <<endl;
while(n>0) //定位本轮比较的指针
{
if(i!=2)
{
Guard_index=index;
index=index->next;
Guard_inserter=inserter;
inserter=Guard_index;
n--;
}
else
{
Guard_index=index;
index=index->next;
n--;
}
}
cout <<n <<endl;
while(index && inserter->number < index->number) //查找插入点
{
Guard_index=index;
index=index->next;
}
if(i!=2) //插入:inserter本身在非链首和链首
{
Guard_inserter=inserter->next; //inserter 脱链
inserter->next=Guard_index->next;
Guard_index->next=inserter;
}
else
{
if(Guard_index != inserter)
{
head = inserter->next;
inserter->next = Guard_index->next;
Guard_index->next = inserter;
}
else
{
head = inserter->next;
inserter->next = index->next;
head->next = inserter;
}
}
}//end for
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>...
int Listlen(Lnode* head)
{
int i=0;
Lnode* tmp=head;
while(head)
{
i++;
head=head->next;
}
head=tmp;
return i;
}
...全文



