else {
head = p1 = chain2; p2 = chain1;
temp = a, a = b, b = temp; }
p3 = head;
while (p2 != NULL) {
p1 = p1->next; p3->next = p2; p3 = p2;
p2 = p2->next; p3->next = p1; p3 = p1; }
return head; }
main() {
int i,n,a,b,h;
struct Lnode*p1,*p2; ElemType e;
printf(\请输入创建的链表的个数:\ scanf(\ switch(n) {
case 1: { Linklist L; initlist(&L); /*创建链表*/ Createlist(L); print(L);
/*插入元素*/
printf(\请输入需要插入元素的值和位置\\n\ scanf(\ scanf(\ Listinsert(L,i,e); print(L); printf(\请输入需要插入元素的值和位置\\n\ scanf(\ scanf(\
Listinsert(L,i,e); print(L);
/*删除元素*/
printf(\请输入要删除的元素的位置:\ scanf(\ Listdelete(L,i,&e); print(L);
printf(\被删除元素为:%ld\\n\ };break; case 2: {
Linklist L,H; initlist(&L); initlist(&H); /*创建链表*/ Createlist(L); print(L); Createlist(H); print(H);
L = inter_link(L, a, H, b);
printf(\合并后的链表:\\n:\ print(L); };break; default:printf(\ } }
五、调试分析及测试结果: 测试数据:
1. (3,9,5,6,11,8);
2. 在5之前插入4,7,并删除11
求集合{1,12,8,6,4,9}和{2,5,12,7,4}的并集
测试结果及分析:
1.运行程序,首先进入选择界面,选择输入需要创建的链表数为1个,输入单链表中的 元素个数为六个。按照操作要求一次输入六个元素3,9,5,6,11,8。按回车键结束,此时程序输出单链表,单链表创建成功。
图1:单链表的创建与输出
2.当程序弹出“请输入需要插入元素的值和位置时”执行单链表的插入操作。按要求输入需要4,插入元素的值“4”和元素的位置“3”,按回车结束,重新输出单链表,插入成功。
图2:单链表的插入操作 3.进行删除操作,根据提示输入删除元素的位置“7”,输出单链表后,第七个语速消失,元素删除成功。
图3:单链表的删除操作
4.单链表的合并:再一次运行程序,选择需要创建链表的个数为2个。按照提示一次输入两个单链表的元素个数和元素值;按回车键结束,此时进行两个单链表的合并操作,输入合并后的链表。
图4:链表的合并
六、实验心得及经验教训:
由于c语言没学好,刚开始做实验时感到无从下手,根本不知道怎样去写源代码。后来通过参考书籍和上网查阅资料,依样画葫芦的弄出了代码,但在程序上一编译,出现了很多错误,根本就不能运行。在编译器的中找到出错的地方,一个个的去改正,有些是由于粗心造成的,有些是因为没有定义造成的。最常见的就是漏掉“;”和大小写不分。但有些程序改了好几遍的都该不过来,这就需要不断的去尝试,again and again ,虽然心里会觉得很烦,但改出来,就会有一种成就感,并非得不偿失。通过本次实验,我知道了写程序是一个循序渐进的过程,并不能一口就吃一个胖子;其次,还要又足够的耐心。当然,扎实的专业知识是少不了的,因此,上课要认真听讲,课外要花点时间巩固提高。这样,做实验写程序时就不会手忙脚乱!