1、实验二 线性表链式存储运算的算法实现昆工版昆明理工大学信息工程与自动化学院学生实验报告( 2013 2014 学年第三学期 )课程名称:数据结构 开课实验室:信自楼444 2013年11月12日年级、专业、班计科122班学号201210405204姓名邹华宇成绩实验项目名称线性表链式存储运算的算法实现指导教师胡守成教师评语 教师签名: 年 月 日注:报告内容按实验须知中七点要求进行。一、实验目的和要求1.掌握线性表链式存储结构的C语言描述及运算算法的实现;2.分析算法的空间复杂度和插入和删除的时间复杂度;3.总结比较线性表顺序存储存储与链式存储的各自特点。程序功能:1.(菜单)主程序;2.链表
2、的建立;3.链表的数据插入;4.链表的数据删除;5.链表的数据输出;二、实验原理及基本技术路线图(方框原理图)三、所用仪器、材料(设备名称、型号、规格等)联想计算机一台Microsoft Visual c+ 6.0四、程序源代码#include#include#include#includetypedef int dataType;typedef struct node dataType data; struct node *next; linkList;linkList *createList() int num; linkList *head,*s,*r; head=NULL; r=NUL
3、L; printf(Enter the number(0 to stop):); scanf(%d,&num); while(num!=00) s=(linkList*)malloc(sizeof(linkList); s-data=num; if(head=NULL) head=s; else r-next=s; r=s; printf(Enter the number(0 to stop):); scanf(%d,&num); if(r!=NULL) r-next=NULL; return head; linkList *get(linkList *head,int i) int j; l
4、inkList *p; p=head; j=0; while(p-next!=NULL)&(jnext; j+; if(i=j) return p; else return NULL; linkList *locate(linkList *head,dataType key) linkList *p; p=head-next; while(p!=NULL) if(p-data!=key) p=p-next; else break; return p; void insertAfter(linkList *p,dataType x) linkList *s; s=(linkList*)mallo
5、c(sizeof(linkList); s-data=x; s-next=p-next; p-next=s; void insertBefore(linkList *p,dataType x) linkList *s; s=(linkList*)malloc(sizeof(linkList); s-data=p-data; s-next=p-next; p-next=s; p-data=x; void insert(linkList *L,dataType x,int i) linkList *p; int j; j=i-1; p=get(L,j); if(p=NULL) printf(err
6、on); getch(); else insertAfter(p,x);printf(nInsert Succeed);getch(); void deleteAfter(linkList *p) linkList *r; r=p-next; p-next=r-next; free(r); void Delete(linkList *L,int i) int j; linkList *p; j=i-1; p=get(L,j); if(p!=NULL&p-next!=NULL) deleteAfter(p);printf(nDelete Succeed);getch(); else printf
7、(errorn); getch(); void display(linkList *head) int i=1; if(head=NULL) printf(Empty Listn); while(head!=NULL) printf(Index%d:%dn,i,head-data); head=head-next; i+; char caiDan() char ch; do printf(1:Create New Listn); printf(2:Insertn); printf(3:Deleten); printf(4:Displayn); printf(5:Exitn); printf(P
8、lease Choose:); while(ch=getch(),ch!=1&ch!=2&ch!=3&ch!=4&ch!=5);return ch; void main()linkList *head=NULL;char ch;int i,key;do system(cls); ch=caiDan(); printf(%c,ch); getch(); printf(n); switch(ch) case 1: head=createList(); printf(List was created successfully);getch();break; case 2: display(head)
9、; if(head=NULL) getch(); break; else printf(nInput Key:);scanf(%d,&key); printf(Input Index u want to insert after:);scanf(%d,&i); insert(head,key,i);break; case 3: display(head); if(head=NULL) getch(); break; else printf(nInput index you want to delete:);scanf(%d,&i); Delete(head,i-1);break; case 4: display(head);getch();break; case 5: exit(0); while(ch!=5);五、运行结果(1)创建单链表(2)插入单链表(3)插入单链表以后的结果(4)删除单链表(5)删除单链表以后的结果(6)插入错误(7)删除错误六、实验总结在做这个程序的时候,虽然遇到一些问题,但最后都被我解决, 自信心上得到比较大的提升,这也是这次实践最大的收获。同时,知识上的收获也是不可忽视的,亲手解决问题的过程也是很好的学习过程,并且积累了一些经验,相信会为以后的学习发展带来非常积极的帮助。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1