预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

《数据结构》实验报告院___信息科学与工程学院__________专业__软件工程________________2011级1103班姓名__甘路唐__学号201116110932013年3月30日上机题目:顺序表的建立、合并、归并算法实现设有线性表LA=(3,5,8,11),LB=(2,6,8,9,11,15,20);要求用顺序表实现.(1)若LA和LB分别表示两个集合A和B,求新集合A=A∪B(相同元素不保留)预测输出LA=(3,5,8,11,2,6,9,15,20)(2)若LA和LB分别表示两个集合A和B,求新集合A=A∪B(相同元素保留)预测输出LA=(2,3,5,6,8,8,9,11,11,15,20)需求分析该程序通过结构体和单链表实现对两个单链表的合并和归并的功能。开发工具采用VisualC++6.0,具体要求如下:输入数据必须为int的整形数据,其数值范围为:-21474836~2147483647输出的数据格式为:%3d测试数据的数据为:3,5,8,112,6,8,9,11,15,20.详细设计该程序采用单链表的存储结构,其数据结构定义如下:typedefstructLnode{intdata;structLnode*next;}Lnode,*LinkList;所用数据类型中每个操作的伪码算法如下:初始化单链表ProgramInitlist(LinkList&L){L=(LinkList)malloc(sizeof(Lnode));L->next=NULL;}EndInitlist创建单链表ProgramCreatelist(LinkList&L){intch;Lnode*s,*r;intflag=1;r=L;while(flag){scanf("%d",&ch);if(ch!=-1){s=(Lnode*)malloc(sizeof(Lnode));s->data=ch;r->next=s;r=s;}else{flag=0;r->next=NULL;}}}EndCreatlist归并两个单链表ProgramMegerlist(LinkList&La,LinkList&Lb,LinkList&Lc){Lnode*p=La->next,*q=Lb->next;Lnode*r=Lc;r->next=p;while(p&&q){if(p->data<=q->data){r=r->next;p=p->next;}else{r->next=q;r=r->next;q=q->next;r->next=p;}}r->next=p?p:q;free(Lb);}Endmegerlist连接两个单链表ProgramMegerlist(LinkList&La,LinkList&Lb,LinkList&Lc){Lnode*p=La->next,*q=Lb->next;Lnode*r=Lc;r->next=p;while(p&&q){if(p->data<=q->data){r=r->next;p=p->next;}else{r->next=q;r=r->next;q=q->next;r->next=p;}}r->next=p?p:q;free(Lb);}EndForEndForEndconnectlist删除单链表中的相同元素ProgramDelete_samedata(LinkList&L){Lnode*p,*q,*r;for(p=L->next;p!=NULL;p=p->next)for(q=p->next,r=p;q!=NULL;q=q->next)if(q->data==p->data){r->next=q->next;free(q);q=r;}elser=r->next;}输出单链表ProgramPrintlist(LinkList&L){Lnode*p=L->next;while(p!=NULL){printf("%3d",p->data);p=p->next;}printf("\n");}EndForEndprintlist调试分析调试过程中遇到的问题与解决方法在Createlist(LinkList&L)中输入数据使用getchar()出现了输出数据和输入数据不一致的错误,将getchar()改成scanf语句在Delete_samedata(LinkList&L)中if语句后面没有加else语句,出现不能正确删除相同元素错误,应加上elser=r->next在主函数中定义L