文档详情

单链表的基本操作..doc

发布:2016-12-30约3.15千字共6页下载文档
文本预览下载声明
课程名称 数据结构 实验名称 单链表的基本操作 日期 11月14号 学生学号 ******* 姓名 *** 班级 B110531班 实验目的:掌握单链表的查找、插入、删除等操作 实验条件:电脑一台、VC++环境 实验内容与步骤: 内容:建立一个有序的单链表,并实现下列操作: 显示所有的元素 查找值为x的元素 插入值为x的元素,并保持有序 删除第i个元素 步骤:在显示所有元素时,因为要有序,所以还有一个对链表的内容进行由小到大的排序的过程,这里用了冒泡法排序。 建立链表要先定义其存储结构,然后向系统申请空间创建一个单链表,用一个头插法建立一个单链表,每读入一个数据,生成一个新的结点,将读入的数据存放到新结点的数据域中。 在做查找时,由于每个结点的存储位置都存放在其前一结点的next域中,所以只能从链表的头指针出发,顺链域next逐个结点往下搜索,直到找到一个结点值与给定的值相等即可。 在做插入时,首先要找到要找到插入的位置,用一个指针指向它,然后申请新的节点空间,最后就是通过修改指针将x插入链表中。 在做删除第i个元素时,首先要通过指针方式找到第i-1个结点并用一个指针指示,然后再删除此结点,并释放存储空间。在此过程中要判断删除的位置是否合法。 实验总结(结论或问题分析): 在做单链表的查找,插入,删除时,可通过output函数来输出,以检验插入删除是否正确。用冒泡法对链表的内容进行由小到大的排序,达到有序输出的目的。凡是涉及到链表的,至少要用到一个流动指针。另外,在做单链表的查找时,有两种方法,一种是按序号查找,一种是按值查找,此为要查找值为x的元素,所以用的是按值查找的方法。 实验成绩 任课教师签名 实验二的源程序: #include stdio.h #include malloc.h//头文件的调用 typedefstruct Node//链表结点的定义 { int data; struct Node * next; }Node,* LinkList; void main()//主函数 { LinkList H;//定义头指针 Node * InitList();//声明函数 voidOutPut(LinkList L); voidCreatFromHead(LinkList L); voidSortList(LinkList L); voidInsertList(LinkList L); voidDelList(LinkList L); H=InitList();//调用函数 CreatFromHead(H); SortList(H); InsertList(H); DelList(H); } LinkListInitList()//定义创建链表的函数 { LinkList p; p=(Node *)malloc(sizeof(Node)); p-next=NULL; printf(链表的初始化成功!\n); return p; } void OutPut(LinkList L)//定义输出函数 { LinkList p; p=L-next; while(p!=NULL) { printf(%d\t,p-data); p=p-next; } printf(\n); } void CreatFromHead(LinkList L)//定义为链表输入内容的函数 { Node *s; int e; int flag=1; printf(请输入整型数值! 输入数值“0”表示输入结束!\n:); while(flag) { scanf(%d,e); if(e!=0) { s=(Node *)malloc(sizeof(Node));//申请结点空间 s-data=e; s-next=L-next; L-next=s; } else flag=0; } } void InsertList(LinkList L)//定义插入函数 { int k; LinkListp,s; p=L; printf(请输入要插入的元素:); scanf(%d,k);//接收输入的数据 s=(Node *)malloc(sizeof(Node));//申请接点空间 s-data=k; printf(\n); while(p-next!=NULL)//按从小到大的顺序进行插入 { if(kp-next-data) { s
显示全部
相似文档