急求!!!!!!设计一个处理单向链表的程序:链表的排列 c++

1.问题描述:(1)建立单向链表,每个结点包括:学号,姓名,性别。(2)按照学号对该链表进行升序排序,要求采用冒泡法,而后进行输出。在主函数中分别调用创建、排序和输出函数... 1. 问题描述:
(1)建立单向链表,每个结点包括:学号,姓名,性别。
(2)按照学号对该链表进行升序排序,要求采用冒泡法,而后进行输出。在主函数中分别调用创建、排序和输出函数。
2. 问题的解决方案:
根据问题描述,首先创建链表,不仅要给各个结点输入数据,更重要的是要建立起前后结点相互联结的关系。可同时设置3个指针变量,head、p、q,它们都是结构类型的指针,分别代表表头、新建结点和表尾结点。使用new操作符开辟新的存储空间,用来存放新结点。而后对该链表进行升序排列,排序时指针要进行互换,没有数据交换时进行结点的访问。
四、主要技术问题的描述
根据三的分析,主要问题在于链表的创建以及排序过程中指针的指向。如需要创建N=5个结点,
if(i==1)
head=p1; //将链表中第一个新建结点作为表头
else
p2->next =p1;
p2=p1;
p1=new(STUDENT);
cin>>p1->stu_number >>p1->name >>p1->sex >>p1->age;
p2->next =NULL; //最后一个结点的next成员不指向任何结点
排序时,设置三个结构指针m、s、p来记录位置,m=head; p=head->next; s=p->next;
若不需要交换,指针依次向后移动:m=p; p=s;s=s->next;
如果需要进行交换,则:p->next=s->next;
s->next=p;
m->next=s;
m=s;s=p->next;

将两个非递减的链表合并成一个新的非递减的链表。
展开
 我来答
水舞江流
2012-06-13 · TA获得超过553个赞
知道小有建树答主
回答量:155
采纳率:0%
帮助的人:213万
展开全部

//这是我的代码,最下面有一个用例示范。

#include <iostream>

#include <string>

using namespace std;

typedef struct node

{

char ID[20];

char name[30];

char gender[10];

int age;

node *next;

}student;

void print(student *head)

{

student *p=head;

while(p->next != NULL)

{

cout<<p->next->ID<<" "<<p->next->name<<" "<<p->next->gender<<" "<<p->next->age<<endl;

p=p->next;

}

cout<<endl;

}

void create(student *head)

{

cout<<"请依次输入学生的学号 姓名 性别 年龄,输入学号为#时结束"<<endl;

char ID[20];

student *p=head;

while(1)

{

cin>>ID;

if(strcmp(ID,"#")==0)

break;

student *q=new student();

strcpy(q->ID,ID);

cin>>q->name>>q->gender>>q->age;

q->next=p->next;

p->next=q;

p=q;

}

cout<<"链表创建完成!"<<endl<<endl;

}

void sort(student *head)

{

student *m=head;

if(head->next==NULL || head->next->next==NULL)

{

cout<<"链表排序完成!"<<endl<<endl;

return;

}

student *p=head->next;

student *s=p->next;

student *k=NULL;

while(k != head->next->next)

{

while(s!=k)

{

if(strcmp(p->ID,s->ID) > 0)

{

p->next=s->next;     

s->next=p;

m->next=s;

m=s;s=p->next;

}

else

{

m=p;

p=s;

s=s->next;

}

}

k=p;

m=head;

p=m->next;

s=p->next;

}

cout<<"链表排序完成!"<<endl<<endl;

}

int main()

{

int order;

student *head=new student();

head->next=NULL;

while(1)

{

cout<<"请输入命令序号:"<<endl<<"1.创建链表"<<endl<<"2.排序链表"<<endl<<"3.输出链表"<<endl<<"4.退出"<<endl;

cin>>order;

switch(order)

{

case 1:create(head);break;

case 2:sort(head);break;

case 3:print(head);break;

case 4:return 0;

}

}

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式