实验一顺序表的插入和删除。
1.实验目的:
了解顺序表的基本概念、结构的定义及在顺序表上的基本操作(插入、删除、查找以及线性表合并),通过用c语言实现以上操作,更好地了解书本上的内容。
2.实验预备知识:
⑴ 复习c语言中数组的用法。
了解线性表和顺序表的概念,顺序表的定义方法;
线性表是n个数据元素的有限序列,至于每个数据元素的具体含义,在不同的情况下各不相同。
顺序表是线性表的顺序存储表示,是用一组地址连续的存储单元依次存储线性表的数据元素。
在c语言中,顺序表是用数组或指针来实现的。
⑶ 掌握线性表在顺序存储结构上实现基本操作:查找、插入、删除和合并的算法。在实现这些算法的时候,要注意判断输入数据的合法性,除此之外还要要注意以下内容:
在实现查找的时候,首先要判断该顺序表是否为空,其次要判断查找后的结果(查到时输出查到的数据,未查到时给出错误提示)。
在实现插入的时候,首先要判断该顺序表是否为满,如为满则须重新分配空间(此时要注意:若顺序表是用数组来实现的,它不能随机分配空间);如不为满,则需判断要插入的位置是否合法(例如:如果一个线性表的元素只有10个,而要在第0个元素前插入或在第11个元素后插入就为不合法)。
其次要注意是前插还是后插,两者是有区别的;最后还要注意插入时各个数据元素移动的次序是从后面依次开始移动。
在实现删除的时候,首先要判断该顺序表是否为空,如为空则报错,如不为空,则需判断要删除的位置是否合法(例如:如果一个线性表的元素只有10个,而要删除第0个或第十一个元素就为不合法)。其次还要注意删除时各个数据元素移动的次序是从前面依次开始移动。
3.实验内容:
1、顺序表的建立。
2、顺序表的插入(输入插入位置i,插入元素)
3、顺序表的删除(输入删除元素位置i)
4、顺序表的打印。
5、顺序表的合并算法(选做)
实验二单链表的插入和删除。
1.实验目的:
了解单链表的基本概念、结构的定义及在单链表上的基本操作(插入、删除、查找以及线性表合并),通过在turbo c实现以上操作更好的了解书本上的内容并体会线性表的两种存储结构的区别。
2.实验预备知识:
⑴ 复习c语言中指针的用法,特别是结构体的指针的用法;
⑵ 了解单链表的概念,单链表的定义方法;
单链表是线性表的链式存储表示,是用一组任意的存储单元依次存储线性表的数据元素。因此,为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据元素ai来说,,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置),而这部分就是用指针来完成的。
⑶ 掌握线性表在链式存储结构上实现基本操作:查找、插入、删除的算法在实现这些算法的时候,要注意判断输入数据的合法性,除此之外还要要注意以下内容:
在实现查找的时候,首先要判断该顺序表是否为空,其次要判断查找后的结果(查到时输出查到的数据,未查到时给出错误提示)。
在实现插入的时候,由于是链式存储,它可以随机产生和**存储空间,所以它不要判断线性表是否为满,但仍需判断要插入的位置是否合法,原因同实验一,其次要注意插入的时候语句的顺序不可颠倒,否则出错。例如:p
ss所指向结点要插入在p所指向的结点之后,则:
正确形式:s->next=p->next
p->next=s
错误形式:p->next=s
s->next=p->next(因为此时p->next已经指向s了)
在实现删除的时候,首先要判断线性表是否为空,为空则不能删除; 其次在删除后要**空间。ps
例如:删除如上图所示s所指向的结点。
p->next=p->next->next
free s
3.实验内容:
⑴ 单链表的插入算法。
⑵ 单链表的删除算法。
⑶ 双向链表的插入和删除算法(选做)
实验三栈的应用。
1.实验目的:
了解栈的概念、栈的特性、在两种存储结构上如何实现栈的基本操作以及栈在程序设计中的应用。通过在turbo c中实现顺序栈的插入和删除加深理解顺序栈的意义。
2.实验预备知识:
⑴ 掌握栈这种抽象数据类型的特点,并能在相应的应用任务中正确选用它;
栈是操作受限的线性表,是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地,表头端称为栈底(botton);
栈又称为后进先出(last in first out)的线性表,简称lifo结构,因为它的修改是按后进先出的原则进行的。
熟练掌握栈类型的两种实现方法,即两种存储结构表示时的基本操作实现算法,特别应注意栈满和栈空的条件以及它们的描述方法。
在学习顺序栈的基本操作实现算法时,应注意:在书上给出的结构定义是采用了一种动态管理方式(不够时,可以再分配),但在c语言中,用数组来存储顺序栈,是静态分配,即不能随机分配空间,这点易引起大家的误解。
3.实验内容:
⑴ 顺序栈的进栈、出栈算法。
⑵ 顺序栈的应用(数制转换)
实验四队列的应用。
1.实验目的:
了解队列的概念、队列的特性、在两种存储结构上如何实现队列的基本操作以及队列在程序设计中的应用。通过在turbo c中实现队列的插入和删除加深理解链队列和循环队列的意义。
2.实验预备知识:
掌握队列这种抽象数据类型的特点,并能在相应的应用任务中正确选用它;
队列是操作受限的线性表,是只允许仅在表的一端进行插入,而在另一端进行删除操作的线性表。在队列中,允许插入的一端称为队尾(rear),允许删除的一端称为对头(front);
队列又称为先进先出(first in first out)的线性表,简称fifo结构。
因为它的修改是按先进先出的原则进行的。
熟练掌握循环队列和链队列的基本操作实现算法,特别注意在循环队列中队满和队空的描述方法。
3.实验内容:
⑴ 链队列的进队和出队算法。
⑵ 循环队列的进队和出队算法。
实验五数组的应用。
1.实验目的:
了解数组的类型定义和表示方法;特殊矩阵和稀疏矩阵的压缩存储方法及运算的实现。通过在turbo c语言的实验加强对数组的理解和对稀疏矩阵的压缩存储方法及运算的实现。
2.实验预备知识:
了解数组的两种存储表示方法,并掌握数组在以行为主的存储结构中的地址计算公式。
loc(i,j)=loc(0,0)+(b2*i+j)*l
掌握对特殊矩阵进行压缩存储时的下标变换公式。
对称矩阵: i*(i-1)/2+j-1 当i>=j
三角矩阵: k=
j*(j-1)/2+i-1 当i三对角矩阵: sa[k]=2*i+j
⑶了解稀疏矩阵的两种压缩存储方法的特点和适用范围,领会以三元组表示稀疏矩阵时进行矩阵运算采用的处理方法。
3.实验内容:
三元组顺序表结构的定义。
矩阵的转置运算。
实验六二叉树的遍历。
1.实验目的:
通过该实验加深对树及二叉树的结构特性、各种存储结构的特点及区别。
2.实验预备知识:
⑴ 了解树的结构特点及概念、二叉树的概念及结构特点。
⑵ 了解树和二叉树的基本概念和术语。
⑶ 二叉树的三种遍历方法(先序、中序、后序遍历)
先序遍历:若二叉树为空,则空操作,否则。
1 访问根结点;
2 先序遍历左子树;
3 先序遍历右子树。
中序遍历:若二叉树为空,则空操作,否则。
1 中序遍历左子树;
2 访问根结点;
3 中序遍历右子树。
后序遍历:若二叉树为空,则空操作,否则。
1 后序遍历左子树;
2 后序遍历右子树;
3 访问根结点。
⑷ 二叉树的各种存储结构及其适用范围,特别是链式存储结构。
3.实验内容:
⑴ 二叉树的链式存储结构定义。
⑵ 二叉树的三种遍历算法。
实验七二叉树的应用。
1.实验目的:
通过该实验加深对线索二叉树的结构特性、各种存储结构的特点及区别。
2.实验预备知识:
⑴ 了解线索二叉树的概念及结构特点。
⑵ 了解线索二叉树的基本术语。
⑶ 线索二叉树的遍历方法(中序遍历)
⑷ 二叉树的各种存储结构及其适用范围,特别是链式存储结构。
3.实验内容:
⑴ 创建线索二叉树的链式存储结构。
⑵ 线索二叉树的中序遍历算法。
实验八图的应用。
1.实验目的:
[1] 掌握图的基本存储方法。
[2] 掌握有关图的操作算法并用高级语言编程实现;
[3] 熟练掌握图的两种搜索路径的遍历方法。
2.实验预备知识:
⑴ 图的定义和基本术语;
⑵ 图的四种存储结构(数组表示法、邻接表、十字链表和邻接多重表);
⑶ 图的两种遍历策略(深度优先搜索和广度优先搜索),并应该注意图的遍历和树的遍历算法之间的区别;
《数据结构》实验安排
实验一线性表及其应用。实验属性 验证性。实验目的 1.深入了解线性表的各种存储结构。2.熟练掌握在各种存储结构上进行插入 删除等操作的算法。3.通过线性表结构解决现实中的一些问题。实验内容 1.顺序表就地逆置。2.单链表就地逆置。3.一元多项式的表示及相加。参考教材第39页2.4节 以上3个题目选择...
数据结构实验安排
供08信管 08网工使用 温州大学计算机学院吴文国。实验一熟悉vc环境 2周 目的 熟悉vc环境,巩固c语言结构体的使用方法。说明 某一个班级有若干同学 假设不超过20人 每个同学有学号,姓名,语文,数学 物理三门功课成绩有总分及名次等信息。程序的结构如下所示。完成该程序并在上机运行测试。附录 程序...
数据结构实验内容安排
数据结构 实验内容安排。1.实验一简单程序设计实验 2学时 最迟提交时间 2016年9月18日。2.实验二线性表实验 3学时 最迟提交时间 2016年9月25日。3.实验三栈和队列实验 4学时 最迟提交时间 2016年10月9日。4.实验四树和二叉树实验 3学时 最迟提交时间 2016年10月16日...