实验一 线性表的链式存储 (1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一线性表的链式存储
【实验时间】
【实验地点】
【实验目的和要求】
1.掌握线性表的结构特点和表示方法;
2.掌握线性表链式存储结构特性和基本操作算法;
3.掌握用指针实现单链表的建立、输出、插入和删除的算法。
【实验类型】验证性
【实验时数】2学时
【实验设备】计算机
【参考资料】
1.数据结构题解
2.C程序设计
【实验内容】
熟练掌握线性表的链式表示和实现方法,利用其定义具体的链表结点;利用链表的结构特点,建立单链表;利用链表结点间的指针关系,实现链表的插入和删除。
[具体要求]
(1) 建立单链表时,要首先输入链表长度,根据输入值来确定所建链表的结点个数;
(2) 在单链表中插入新结点时,要给出结点的插入位置和数据域的值;
(3) 在单链表中删除某个结点时,要给出要删结点的位置;
(4) 要编写单链表的输出函数,以便能验证程序的执行结果。
【实验分析】
1、实验的第一步应该建立单链表结点类型和程序所需的宏或数据类型,例如:
#define NULL 0 //宏定义NULL的值为0
#define LEN sizeof(struct node) //宏定义LEN,为申请结点空间时做准备
typedef struct
{ int a;
float b;
} elemtype; //定义elemtype类型,这里同学们可以根据自己的情况来自行定义。
typedef struct node
{elemtype data; //data域为elemtype类型的,它应该包含两个子域:a和b
struct node *next;
}NODE , *NODEPTR; //定义了单链表结点类型和单链表结点指针类型
2、对单链表的四种操作进行实现。
(1) NODEPTR creatlink() 建立单链表的函数
很明显这个函数的返回值时结点指针类型的,所以这个函数应该返回的时建立的单链表的头指针。同学们可以根据自己的构思,从前往后或从后往前建立单链表。此外,提醒同学们最好建立带有附加头结点的单链表。
(2)void print(NODEPTR Lh) 输出单链表的函数
这个函数主要是将单链表中各结点的数据域的信息输出出来,输出数据的格式要根据同学们对于链表结点的data域所属的elemtype类型来设定。
(3) void del(NODEPTR Lh,int i) 删除结点的函数
这个函数完成的是在链表Lh中删除指定位置i的结点。i的值是在执行删除操作之前通过键盘输入的。
(4) void insert (NODEPTR Lh, int i) 插入结点的函数
这个函数完成的是在链表Lh中在指定位置i的结点前或后面插入新建结点。i的值是在执行插入操作之前通过键盘输入的。同学们可以根据自己的情况选择是在结点前面插入还是在后面插入。
3、第二步应该构思程序主界面。
本实验要求实验单链表的建立、输出、插入和删除四种具体操作,因此可以主界面中可以给出相应的这四种操作的标题,用户在运行时可以根据自己的需要来选择要进行的操作,形式可以如下:
************************
Creat: 1 Print: 2
Delete: 3 Insert: 4
Esc: 0
************************
please input your choice (0-4):
用户通过键盘输入各操作对应的数码,就可以进入相应的操作了。
这是要使用一个变量(假设为operate_num)来接收用户输入的操作数码,在主函数中利用switch语句根据这个量的值来进行不同的操作。例如:
switch (operate_num)
{case 1:
进行单链表建立操作;break;
case 2:
输出单链表的数据信息;break;
case 3:
输入要删除的结点的位置;
删除指定结点;
break;
case 4:
输入要插入的位置;
插入新建结点;
break;
}
【实验原理、数据(程序)记录】
略。
请同学们根据上面的步骤提示自己编程,不要互相抄袭。
【实验结果】
根据具体执行的情况,写出相应的实验结果。同学们各自执行的结果应该不尽相同。【注意事项】
1.学生上机时要严格遵守实验规章制度,若实验设备出现故障,应及时向实验指导教师反映,不要私自拆卸实验设备。
2.独立完成实验要求的内容,仔细观察和记录实验结果,领会实验目的,并认真完成实验报告。