




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、上机实验报告学 院: 计算机与信息技术学院专 业: 计算机科学与技术(师范)课程名称: 数据结构实验题目: 单链表建立及操作班级序号: 师范1班学 号: 201421012731 学生姓名: 邓雪指导教师: 杨红颖完成时间:2015年12月25号 1、 实验目的: (1)动态地建立单链表; (2)掌握线性表的基本操作:求长度、插入、删除、查找在链式存储结构上的实现; (3)熟悉单链表的应用,明确单链表和顺序表的不同。2、 实验环境: Windows 8.1Microsoft Visual c+ 6.03、 实验内容及要求: 建立单链表,实现如下功能:1、建立单链表并输出(头插法建立单链表);2
2、、求表长;3、按位置查找4、按值查找结点;5、后插结点;6、前插结点7、删除结点;四、概要设计:1、通过循环,由键盘输入一串数据。创建并初始化一个单链表。 2、编写实现相关功能函数,完成子函数模块。 3、 调用子函数,实现菜单调用功能,完成顺序表的相关操作。main建表求表长查找插入删除输出退出五、代码:#include<stdio.h>#include<stdlib.h>typedef char datatype;typedef struct nodedatatype data;struct node *next;linklist;linklist *head,*p;
3、/头插法建立单链表linklist *Creatlistf() char ch; linklist *head,*s;head=NULL;ch=getchar();printf("请输入顺序表元素(数据以$结束):n");while(ch!='$')s=(linklist *)malloc(sizeof(linklist);s->data=ch;s->next=head;head=s;ch=getchar();return head;/求单链表的长度void get_length(struct node *head) struct node *p
4、=head->next;int length=0; while(p)length+;p=p->next;head->data=length;printf("该单链表的长度为:%dn",head->data);/按序号查找结点linklist *Get(linklist *head,int i) int j;linklist *p;p=head;j=0; while(p->next!=NULL)&&(j<i)p=p->next;j+;if(i=j)return p;/按值查找结点linklist *Locate(lin
5、klist *head,datatype key) int pos=0; p=head->next;printf("查找结点位置为:");while(p!=NULL)if(p->data!=key)p=p->next;pos+;else pos+;break;return p;/后插结点void Insertafter(linklist *p,datatype x) linklist *s; s=(linklist *)malloc(sizeof(linklist);s->data=x;s->next=p->next;p->next
6、=s;printf("插入成功");/前插结点void Insertbefore(linklist *p,datatype x) linklist *s;s=(linklist *)malloc(sizeof(linklist);s->next=p->next;s->data = p->data;p->data=x;p->next=s;/删除结点linklist *Deleteafter(linklist *head) int i;linklist *r,*p;printf("请输入要删除的结点位置:");scanf(
7、"%d",&i);if(i=1)r=head;head=head->next;elsep=Get(head,i-1-1);r=p->next;p->next=r->next;free(r);return head;/输出单链表void output(linklist *p) while(p->next!=NULL)printf("%c ",p->data);p=p->next;printf("n");void main() linklist *head; int k,i,pos; ch
8、ar x; datatype key; printf("_单链表的操作_n"); printf("t1.头插法建立单链表n"); printf("t2.输出单链表n"); printf("t3.求单链表的长度n"); printf("t4.按序号查找结点n"); printf("t5.按值查找结点n"); printf("t6.后插结点n"); printf("t7.前插结点n"); printf("t8.删除接点n"
9、;); printf("t9.退出n"); do printf("选择所需功能: "); scanf("%d",&k); switch(k) case 1:head=Creatlistf(); break; case 2:printf("单链表为:n"); output(head); break; case 3:get_length(head); break; case 4:printf("请输入要查找的结点序号: "); scanf("%d",&i); ge
10、tchar(); printf("结点的值为:%cn",Get(head,i-1)->data); break; case 5:printf("请输入要查找的结点值: "); scanf("%c",&key); getchar(); printf("%d",Locate(head,key); printf("n"); break; case 6:printf("输入要插入的结点位置:"); scanf("%d",&pos); getc
11、har(); printf("请输入插入的结点值:"); scanf("%c",&x); getchar(); Insertafter(Get(head,pos-1),x); printf("插入成功"); break; case 7:printf("输入要插入的结点位置和结点值(前插)(p,x):"); scanf("%d,%c",&pos,&x); getchar(); Insertbefore(Get(head,pos-1),x); printf("插入成
12、功"); break; case 8: head=Deleteafter(head); break; case 9:printf("退出"); exit(0); default:printf("输入错误n"); exit(0);while(1);六、运行界面菜单功能七、实验中遇到的问题及总结二次输出链表元素时链表的第一个结点会变成乱码字符。第一次输出没有错误。顺序表和单链表的区别:在顺序表中,我们是用一组地址连续的存储单元来依次存放线性表的结点,因此结点的逻辑次序和物理次序一致。而链表则不然,链表是用一组任意的存储单元来存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任何位置上,因此,链表中结点的逻辑次序和物理次序不一定相同。为了能够正确表示结点间的逻辑关系,在存储每个结点值得同时,还必须存储指示后继结点的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论