资源描述:
《实验二 单链表基本操作》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验二单链表基本操作一实验目的1.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。2.掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。二实验要求1.预习C语言中结构体的定义与基本操作方法。2.对单链表的每个基本操作用单独的函数实现。3.编写完整程序完成下面的实验内容并上机运行。4.整理并上交实验报告。三实验内容1.编写程序完成单链表的下列基本操作:(1)初始化单链表La。(2)在La中第i个元素之前插入一个新结点。(3)删除La中的第i个元素结点。(4)在La中查找某结点并返回其位置。(5
2、)打印输出La中的结点元素值。2.构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、Lb合并成一个有序单链表Lc。合并思想是:程序需要3个指针:pa、pb、pc,其中pa,pb分别指向La表与Lb表中当前待比较插入的结点,pc指向Lc表中当前最后一个结点。依次扫描La和Lb中的元素,比较当前元素的值,将较小者链接到*pc之后,如此重复直到La或Lb结束为止,再将另一个链表余下的内容链接到pc所指的结点之后。3.构造一个单链表L,其头结点指针为head,编写程序实现将L逆置。(即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。)四思考与
3、提高1.如果上面实验内容2中合并的表内不允许有重复的数据该如何操作?2.如何将一个带头结点的单链表La分解成两个同样结构的单链表Lb,Lc,使得Lb中只含La表中奇数结点,Lc中含有La表的偶数结点?1.编写程序完成单链表的下列基本操作:(1)初始化单链表La。(2)在La中第i个元素之前插入一个新结点。(3)删除La中的第i个元素结点。(4)在La中查找某结点并返回其位置。(5)打印输出La中的结点元素值。#include#include#include#defineOK1#defineERROR0typedef
4、intStatus;typedefintElemType;//定义存储结构typedefstructLnode{intdata;/*每个元素数据信息*/structLnode*next;/*存放后继元素的地址*/}LNode,*LinkList;intmain(){voidCreate_L(LinkList&L,intn);voidPrint_L(LinkListL);StatusListInsert_L(LinkList&L,inti,ElemTypee);StatusListDelete_L(LinkList&L,inti,ElemType&e);StatusFind
5、_L(LinkListL,inte);LinkListLa;//创建单链表Laintn;printf("请输入链表La中的元素个数:");scanf("%d",&n);Create_L(La,n);//初始化单链表printf("现在La中的元素为:");Print_L(La);printf("-------------------------------------");printf("现在准备插入元素,请输入插入位置及所插入元素的值");inti,e;scanf("%d%d",&i,&e);ListInsert_L(La,i,e);printf("
6、插入后La中的元素为:");Print_L(La);printf("-------------------------------------");printf("现在准备删除元素,请输入删除位置");scanf("%d",&i);ListDelete_L(La,i,e);printf("删除后La中的元素为:");Print_L(La);printf("-------------------------------------");printf("请输入所要查找元素的值:");scanf("%d",&e);Find_L(La,e);pri
7、ntf("所要查找元素的位置为:%d",Find_L(La,e));}voidCreate_L(LinkList&L,intn){intj=1;L=(LinkList)malloc(sizeof(Lnode));L->next=NULL;//先建立一个带头结点的单链线性表Lfor(inti=n;i>0;--i){LinkListp=(LinkList)malloc(sizeof(Lnode));printf("请输入链表La中的第%d个元素:",j++);scanf("%d",&p->data);p->next=L->