数据结构实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验指导书
实验一线性表的顺序存储结构
一、实验学时 4学时
二、背景知识:顺序表的插入、删除及应用。
三、目的要求:
1.掌握顺序存储结构的特点。
2.掌握顺序存储结构的常见算法。
四、实验内容
1.从键盘随机输入一组整型元素序列,建立顺序表。(注意:不可将元素个数和元素值写死在程序中)
2.实现该顺序表的遍历(也即依次打印出每个数据元素的值)。
3.在该顺序表中顺序查找某一元素,如果查找成功返回1,否则返回0。
4.实现把该表中某个数据元素删除。
5.实现在该表中插入某个数据元素。
6.实现两个线性表的归并(仿照课本上P26 算法2.7)。
7. 编写一个主函数,调试上述6个算法。
五、实现提示
1.存储定义
#include
#include
#define MAXSIZE 100 //表中元素的最大个数
typedef int ElemType;//元素类型
typedef struct list{
ElemType *elem;//静态线性表
int length; //表的实际长度
int listsize; //表的存储容量
}SqList;//顺序表的类型名
2.建立顺序表时可利用随机函数自动产生数据。
3.为每个算法功能建立相应的函数分别调试,最后在主函数中调用它们。
六、注意问题
插入、删除元素时对于元素合法位置的判断。
七、测试过程
1.先从键盘输入元素个数,假设为6。
2.从键盘依次输入6个元素的值(注意:最好给出输入每个元素的提示,否则除了你自己知道之外,别人只见光标在闪却不知道要干什么),假设是:10,3,8,39,48,2。
3.遍历该顺序表。
4.输入待查元素的值例如39(而不是待查元素的位置)进行查找,因为它在表中所以返回1。假如要查找15,因为它不存在,所以返回0。
5.输入待删元素的位置将其从表中删掉。此处需要注意判断删位置是否合法,若表中有n个元素,则合法的删除位
置是[1,n]。例如,该示例中的合法删除位置是[1,6],输入其它位置均应报错。提示:删除完毕后再调用遍历函数打印一下结果,看删除的是否正确。
6.输入待插入元素值和待插入的位置,进行插入操作。注意:要判断待插入位置的合法性,应是[1,n+1]。此示例中合法插入位置是[1,7],输入其它位置均应报错。同理,插入完毕后也要调用遍历函数,看看插入的结果是否正确。
7.要实现两个表的归并,需要先建立两个顺序表LA和LB,依照算法2.7归并后将结果放入LC表中,故而归并操作结束后也要对LC表进行遍历,以验证结果的正确。
实验二链式存储结构----单链表的有关操作
一、实验学时 8学时
二、背景知识:单链表的插入、删除及应用。
三、目的要求
1.掌握单向链表的存储特点及其实现。
2.掌握单向链表的插入、删除算法及其应用算法的程序实现。
四、实验内容
1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。
2.遍历单向链表。
3.把单向链表中元素原地逆置(即不允许申请新的结点空间)。
4.在单向链表中删除所有的偶数位置的元素结点。(注:不是删除数据域的值为偶数的结点)
五、实验说明
1.类型定义
#include
typedef int ElemType;//元素类型
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
2.为了算法实现简单,最好采用带头结点的单向链表。
六、注意问题
1.重点理解链式存储的特点及指针的含义。
2.注意比较顺序存储与链式存储的各自特点。
3.注意比较带头结点、无头结点链表实现插入、删除算法时的区别。如果时间允许,请实现在不带头结点的单链表中的上述操作。
4.单向链表的操作是数据结构的基础,一定要注意对这部分的常见算法的理解。
七、测试过程
1.从键盘输入若干个元素以构造一个带头结点的单链表,例如:23,18,3,94,39。提示:构造单链表可以用头插法,也可用尾插法,但是头插之后的结果正好是逆序的,而尾插是正序。
2.对该单链表进行遍历,打印出每个数据元素结点的数据域的值。注意:头结点的数据域可以不赋值,它不被打印,因为它只是为了编程统一引入的,并没有用它来装实际的数据。
3.对单链表进行原地逆置。注意:原地逆置是指不增加额外的存储空间,故而应该只修改该链表的指针值,而不开
辟新的单元就完成逆置。提示:头插法产生的结果正好是逆序的,所以可将原链表中的数据元素结点依次摘下,用头插法插入到头结点后面,就实现了原地逆置。
4.删除链表中的偶数位置元素,即删除链表中的2号、4号、6号、8号……元素。提示:删除i号结点,需要将i-1号结点的指针域指向i+1号结点。所以,要完成删除偶数位置结点,一方面要记录每个结点的位序,另一方面要记录它的前一结点位置以方便删除。
5.注意测试边界数据,例如链表长度为0。
实验三栈和队列的应用
一、实验学时 4学时
二、背景知识:入栈、出栈,入队、出队。
三、目的要求
1.掌握栈、队列的思想及其存储实现。
2.掌握栈、队列的常见算法的程序实现。
四、实验内容
1.采用顺序存储实现栈的初始化、入栈、出栈、判栈空操作。
2.采用顺序存储实现循环队列的初始化、入队、出队操作。
3.综合训练:
1) 利用栈实现求一个十进制数的二进制表示算法。
2) 利用栈实现表达式中括号匹配算法。
五、基本要求
1.实现算法3中的某一个即可。
2.类型定义
顺序栈示例
#define MAX 100 //栈的最大值
typedef struct
{ElemType *base;
int top;