单链表的建立查找插入删除
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单链表的建立查找插入删除
数学与计算机学院计算机系实验报告
课程名称:数据结
构
年级:2011 实验成绩:
指导教师:黄襄念姓名:
abraham 实验教室:6A-412
实验名称:单链表的建立/查找/插入/删除学号:实验日期:
2012/12/16
实验序号:实验1 实验时间:6:40
—9:50
实验学时:4
撰写说明:填写上面相关栏目,须作相应修改。
仔细阅读:最后“六、提交文档要求”有关说明。
一、实验目的
1.熟悉掌握链表的创建、链表的常用算法:如查找节点,删除节点,插
入节点等等。
二、实验环境
1. 操作系统:Windows XP
2. 开发软件:VC++6.0
三、实验内容
●程序功能
本程序完成了以下功能:
1.可以逐个添加英文字到链中。
2.可以删除链中的任意一元素而保持其他元素整体不变。
3.可以查找链表中的任意一个元素,只要输入该元素在链表中
的位置,就可以查找到该元素。
4.可以在该链表中插入任意一个元素不改变整体的顺序,输入
你要插入的位置即可。
●数据结构
本程序中使用的数据结构(若有多个,逐个说明):
1.它的优缺点
1)能将物理地址散乱的链接在一起,更好的利用空间,可
以动态的申请空间,如使用数组未必能申请到连续的空间但是用链表就可以解决这个问题。
2)能快速的删除节点,和增添节点。
2.逻辑结构图
3.存储结构图Head m 开始
创建链插
入
节
删
除
节
查
找
节结束
Num Num
4.存储结构的C/C++ 语言描述
typedef struct node
{
char data;
struct node *next;
}link;
●算法描述(结合流程图或伪代码描述算法,若无可略)
本程序中采用的算法(若有多个,逐个说明)
1.算法名称:创建链表
2.算法原理或思想
通过申请一个结构体指针,在用结果体指针申请一个空间,在输入信息后用前一个节点的Next指针将增加的结点与前面的结点链接,如此重复操作,就形成一个链表。
3.算法特点(优缺点,与可选或同类算法作对比)
与数组相比较,是不连续的,它能随意的添加结点你需要多少就添加多少不会浪费多余的空间也不用提前去预测需要多少空间而其他的要考虑通用性,就必须申请较大的空间,而造成空间的浪费。
●程序说明
1.系统流程图(各个函数或类的调用流程图)
2、程序模块(类或函数)代码:包括注释说明、模块功能、I/O 参数等
1) 创建链表模块:将链表创建录入数据。 typedef struct node {
char data;
struct node *next; }link;
link * get(link *m, int i) {
link *p;int j=0; p=m;
while((jnext!=NULL)) {p=p->next;j++;} if(j==i) return p; else
return NULL; }
2) 删除模块:将链表中不需要的节点数据删除。 link * del(link *m, int i) {
link *p,*s; p=get(m,i-1); if(p==NULL)
cout<<"输入有误"< s=p->next; Ma Create Deleted Find(he Ins 退出 p->next=s->next; free(s); } return m; } 3)查找模块:查找你想要的信息。 link * find(link *m, char ch) { link *p; int i=0; int j=0; p=m; while(p!=NULL) { i++; if(p->data!=ch) p=p->next; else {cout<<"您查找的数据在第"< j=1;p=p->next; } } if(j!=1) cout<<"您查找的数据不在线性表中."< return m; } 4)添加模块:添加你还需要添加的信息到链表中。 link * ins (link *m, char ch,int i) { link *p,*s; p=get(m,i-1); if(p==NULL) cout<<"输入有误"< else { s=(link *)malloc(sizeof(link)); s->data=ch; s->next=p->next; p->next=s; } return m; } 5)打印模块:打印出信息。 link * print(link *m) { int i,k; char ch; link *p,*q;