| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4160 人关注过本帖
标题:关于合并a,b两个链表的一个问题
取消只看楼主 加入收藏
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
结帖率:50%
收藏
 问题点数:0 回复次数:1 
关于合并a,b两个链表的一个问题

题目是将a,b两个链表合并并按升序排列,a,b链表的结点都包含学号,分数。
现在编程如下:
#include "stdio.h"
struct student
{

int number;
int score;
struct student *next;
struct student *before; //由于要排序,所以要建立双向链表
}*Head_A,*Rear_A,*Head_B,*Rear_B,*p,*p1;

void main()
{
int i,j,Length_A,Length_B,Length_Z;
printf("此程序是把a,b两个链表合并并按学号升序排列.\n");
printf("a,b两个链表中的结点包括学号、成绩。\n");
printf("先分别输入两个链表的长度.\n");

printf("请输入a链表的长度:"); //输入链表a
scanf("%d",&Length_A);

printf("请输入a链表结点中的学号和成绩\n");
printf(" 学号 成绩\n");
for(i=1;i<=Length_A;i++)
{
p=(struct student*)malloc(sizeof(struct student));
printf("请输入第%d个同学的学号和成绩:",i);
scanf("%d%d",&p->number,&p->score);
p->next=NULL;
if(i==1) {Head_A=p;Rear_A=p;p->before=NULL;}
else {p->before=Rear_A;Rear_A->next=p;Rear_A=p;}
}
printf("现在将输出a链表.\n"); //输出链表a
printf(" 学号 成绩\n");
p=Head_A;
for(i=1;i<=Length_A;i++)
{
printf("第%d个同学:%d %d\n",i,p->number,p->score);
p=p->next;
}
printf("请输入b链表的长度:"); //输入链表b
scanf("%d",&Length_B);

printf("请输入b链表结点中的学号和成绩\n");
printf(" 学号 成绩\n");
for(i=1;i<=Length_B;i++)
{
printf("第%d个同学的学号和成绩:",i);
scanf("%d%d",&p->number,&p->score);
p->next=NULL;
if(i==1) {Head_B=p;Rear_B=p;}
else {p->before=Rear_B;Rear_B->next=p;Rear_B=p;}
}
printf("现在将输出b链表.\n"); //输出链表b
printf(" 学号 成绩\n");
p=Head_A;
for(i=1;i<=Length_B;i++)
{
printf("第%d位同学的学号和成绩:%d %d\n",i,p->number,p->score);
p=p->next;
}
printf("现在将a,b链表进行合并\n"); //合并两链表
Rear_A->next=Head_B; //将b链表的头指针地址赋值给a链表的尾部
Rear_A=Head_B;
printf("现在输出合并后的新链表\n"); //输出新链表
Length_Z=Length_A+Length_B; //长度变为两链表之和
p=Head_A;

printf(" 学号 成绩\n");
for(i=1;i<=Length_Z;i++)
{
printf("第%d位同学的学号和成绩:%d %d\n",i,p->number,p->score);
p=p->next;
}
p1=(struct student*)malloc(sizeof(struct student));
printf("现在进行排序工作\n");

for(i=1;i<Length_Z;i++)
{ p=Head_A;
p->before=NULL;
p1=p->next;
for(j=1;j<=Length_Z-i;j++)
{
if(p->number>p->next->number)
{
p1=p->next;
p->next=p1->next;
p1->next->before=p1->before;
p1->next=p1->before;
if(j==1) {p->before=p1;Head_A=p1;p1->before=NULL;}
else {p1->before=p->before;p1->before->next=p1;}
p1=p->next;
}
else {p=p1;p1=p1->next;}
}
}
//经过上面的程序,已经把顺序排好
printf("现在将输出已按升序排列的新链表.\n");
printf(" 学号 成绩\n");
for(i=1;i<=Length_Z;i++)
{
printf("第%d位同学的学号和成绩:%d %d\n",i,p->number,p->score);
p=p->next;
}



经编译后出现一个error,fatel error C1004:unexpected end of file found
这是哪里错了呢?????
我是用turbo C/C++for windows集成实验与学习环境编程的

搜索更多相关主题的帖子: 链表 student 学号 int Length 
2006-11-02 10:23
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
收藏
得分:0 
晕,在最后居然少了个},呵呵
非常感谢啊
现在可以了

West and east,home is best……
2006-11-02 10:37
快速回复:关于合并a,b两个链表的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011678 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved