数据结构实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档