双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

求教一个问题,搞了半天不定.

hkk333 hkk333 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
钱能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;
}

...全文
评论 8
收藏 已收藏
分享
返回顶部
hkk333
C++ 语言 65,214 成员 250,514 内容