65,185
社区成员




void myisort(Lnode*& head,const int size)
{
Lnode* Guard_inserter;
Lnode* inserter;
Lnode* Guard_index;
Lnode* index;
int n;
for(int i=1;i<size;i++)
{
n=size-i;
Guard_inserter = inserter = Guard_index = index = head;
index=index-> next;
while(--n) //定位本轮比较的指针
{
Guard_index=index;
index=index->next;
Guard_inserter=inserter;
inserter=inserter->next;
}
while(index && index->number < inserter->number) //查找插入点
{
Guard_index=index;
index=index->next;
}
if(inserter->next == index) //不需要移动
{
print(head);
continue;
}
if(i!=9) //插入:inserter本身在非链首
{
Guard_inserter->next = inserter->next;
inserter->next = Guard_index->next;
Guard_index->next = inserter;
}
if(i==9) //插入:inserter本身在非链首
{
head = head->next;
inserter->next = Guard_index->next;
Guard_index->next = inserter;
}
print(head);
}//end for
}
#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;
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;
}
void myisort(Lnode*& head,const int size)
{
Lnode* Guard_inserter;
Lnode* inserter;
Lnode* Guard_index;
Lnode* index;
int n;
for(int i=1;i<size;i++)
{
n=size-i;
Guard_inserter = inserter = Guard_index = index = head;
while(--n) //定位本轮比较的指针
{
Guard_index=index;
index=index->next;
Guard_inserter=inserter;
inserter=inserter->next;
}
while(index && index->number < inserter->number) //查找插入点
{
Guard_index=index;
index=index->next;
}
if(i!=9) //插入:inserter本身在非链首
{
Guard_inserter->next = inserter->next;
inserter->next = Guard_index->next;
Guard_index->next = inserter;
}
if(i==9) //插入:inserter本身在非链首
{
head = head->next;
inserter->next = Guard_index->next;
Guard_index->next = inserter;
}
}//end for
}