数据结构实验报告三
- 格式:doc
- 大小:626.05 KB
- 文档页数:8
<1>初始化一个队列。
循环队列:
链队列:
<2>判断是否队空。
循环队列:
链队列:
<3>判断是否队满。
循环队列:
第一组数据:入队n个元素,判断队满
第二组数据:用循环方式将1到99,99个元素入队,判队满
入队
第一组数据:4,7,8,12,20,50
第二组数据:a,b,c,d,f,g
出队
取队头元素
3.数据结构设计
循环队列
4.算法设计
(除书上给出的基本运算(这部分不必给出设计思想),其它实验内容要给出算法设计思想)
求当前队列中的元素个数:书写函数配合出队函数和判对空函数,定义一个整型变量i计数,在一个循环中每出对一次,计数器加一,直到对空,返回i即为队列元素个数。
第二题:首先判断队列是否队满,如果队满打印队满,结束程序,如果队列不满则进行下一步操作,定义一个变量x,从键盘输入其值,判断如果x的值为0,结束程序,如果不为0进入循环,如果x的模运算不等于0,将x入队,反之出队,直到x的模运算等于0,最后通过循环输出队列。
实现:从列不空,删除Q的队头元素用e返回其值,并返回OK,则返回ERROR
Status EnQueue (LinkQueue *Q, QE1emType e) {
QueuePtr p
if (Q->front==Q- >rear)
三、循环队列与链队列性能分析
1.循环队列与链队列基本操作时间复杂度均为0(1);
2.队列的抽象数据队列Data同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。Operation InitQueue(*Q):初始化操作,建立一个空队列Q. DestoryQueue(*Q):若队列Q存在,则销毁它。ClearQueue(*Q):将队列Q清空 GetHead(Q,*e):若队列Q存在且非空,用e返回队列Q的队头元素。EnQueue(*Q,e):若队列Q存在且非空, 插入新元素e到队列Q中并称为队元素。DeQueue(*Q,*e):删除队列Q中队头元素,并用e返回其值QueueL ength(Q)。
循环队列与链队列
队列是一种先进先出(iirst In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。从队列的定义可知,队列的入队操作,其实就是在队尾追加一个元素,不需要移动任何元素,因此时间复杂度为O(1)。队列的删除操作,与栈不同的是,队列元素的出列是在队头,即小标为0的位置,若要删除一个元素的话, 需要移动队列的所有元素,因此事件复杂度为O(n)。(2)front/rear指针: 为了避免当只有一个元素时,队尾和队头重合使处理变得麻烦,所有引入两个指针,front指针指向队头元素,rear指针指向队尾元素的下一个位置,这样当front等于rear时,队列为空(空队列而不是队列还剩下一个元素。
2、链队列结构typedef int QElemType/ *结点结构*/typedef struct QNode{ QElemTypedata; //数据域struct QNode *next; //指针域}QNode,*Queueptr:/*队列的链表结构,*/typedef struct{ Queueptr front,rear; /队头.队尾指针}LinkQueue;3.链队列的入队操作算法:实质为链表尾插入结点,尾指针指向新结点a.为新结点s开辟一段空间, 并判断是否存储分配成功;b.将插入元素存到新结点s的数据域,并初始化s的指针域;c.把拥有元素e新结点s赋值给原队列结点的后继; d.把当前的s设置为队尾结点, rear指向s
数据结构实验报告
姓名
学号
专业班级
指导教师
实验时间
实验地点
(实验名称)
1.实验目标
熟练掌握队列的顺序存储结构和链式存储结构。
熟练掌握队列的有关算法设计,并在循环顺序队列和链队列上实现。
根据具体给定的需求,合理设计并实现相关结构和算法。
2.实验内容和要求
循环顺序队列的实验要求
循环顺序队列结构和运算定义,算法的实现以库文件方式实现,不得在测试主程序中直接实现;
实现:插入元素e为Q的新队阮素
Status EnQueue (LinkQueue *Q, QE1 emType e) {QueuePtr s= (QueuePtr) ma11oc (si zeof (Q4.链队列的删除操作算法:緹头结点的后继结点出,将头结点的后继改为他后面的结点,若链表除头结点外,只剩下一个元素时,则需將rear指向头结点。a.定义- 个QueuePtr结点p,盱暂存欲删除的结点Q-> front-next;b.将欲删除结点数据域数据赋值给e;c.将欲删除结点的后继结点(p- > next)赋值给头队头结点的后继(Q-> front-> next)d.判定若队头是队尾,则删除后将rear指向头结点,最后再释放欲删除结点p.
实验程序有较好可读性,各运算和变量的命名直观易懂,符合软件工程要求;
程序有适当的注释。
链队列实验要求
本次实验中的链队列结构指不带头结点的单链表;
链队列结构和运算定义,算法的实现以库文件方式实现,不得在测试主程序中直接实现;
实验程序有较好可读性,各运算和变量的命名直观易懂,符合软件工程要求;
程序有适当的注释。
2.循环队列事先请好空间,使用期间不释放;链队列,无需事先申请空间但是每次申请和释放结点会存在一些事件开销;
3.循环队列必须有一调定的长度,可能存在空间浪费;链队列需要一个指针域,将两个结构体链接在一起。
[7. 附录]
(源代码清单。纸质报告不做要求。电子报告,可直接附源文件,删除编译生成的所有文件)
求当前队列中元素个数
链队列:;
链队列:
编写算法实现
①初始化空循环队列;
②当键盘输入奇数时,此奇数入队;
③当键盘输入偶数时,队头出队;
④当键盘输入0时,算法退出;
⑤每当键盘输入后,输出当前队列中的所有元素。
链队列:
6.总结和心得
1、队列与循环队列1.队列(1)队列(queue)是只允许在一端进行插入操作,而在另-端进行删除操作的线性表,