实验三队列实验报告

合集下载

实验三栈和队列

实验三栈和队列

实验三栈和队列
1、参考工程shiyan03_1,其中StackEmpty ( )、StackLength ( ) 、GetTop ( )、Push ( )、Pop( )未实现,请将其完善,并设计一个主程序实现如下功能:
(1)初始化栈S。

(2)判断栈S是否非空。

(3)依次进栈元素a,b,c,d,e。

(4)判断栈S是否非空。

(5)输出栈的长度。

(6)输出从栈顶到栈底的元素。

(7)输出出栈序列。

(8)判断栈S是否非空。

(9)释放栈。

2、参考工程shiyan03_2,编写实现链队列的各种基本运算的程序LinkQueue.cpp,并在此基础上设计一个主程序实现如下功能:
(1)初始化队列Q。

(2)判断队列Q是否非空。

(3)依次进队元素a,b,c。

(4)出队一个元素,输出该元素。

(5)输出队列Q的元素个数。

(6)依次进队元素d,e,f。

(7)输出队列Q的元素个数。

(8)输出出队序列。

(9)释放队列。

3、编写工程shiyan03_3,实现顺序循环队列的各种基本运算,并在此基础上设计一个主程序实现如下功能:
(1)初始化队列Q。

(2)判断队列Q是否非空。

(3)依次进队元素a,b,c。

(4)出队一个元素,输出该元素。

(5)输出队列Q的元素个数。

(6)依次进队元素2,0,0,9,1,0,0,1。

(7)输出队列Q的元素个数。

(8)输出出队序列。

(9)释放队列。

数据结构实验报告实验总结

数据结构实验报告实验总结

数据结构实验报告实验总结本次数据结构实验主要涉及线性表、栈和队列的基本操作以及链表的应用。

通过实验,我对这些数据结构的特点、操作和应用有了更深入的了解。

下面对每一部分实验进行总结。

实验一:线性表的基本操作线性表是一种常见的数据结构,本实验要求实现线性表的基本操作,包括插入、删除、查找、遍历等。

在实验过程中,我对线性表的结构和实现方式有了更清晰的认识,掌握了用数组和链表两种方式实现线性表的方法。

实验二:栈的应用栈是一种后进先出(LIFO)的数据结构,本实验要求利用栈实现简单的括号匹配和后缀表达式计算。

通过实验,我了解到栈可以方便地实现对于括号的匹配和后缀表达式的计算,有效地解决了对应的问题。

实验三:队列的应用队列是一种先进先出(FIFO)的数据结构,本实验要求利用队列实现银行排队和迷宫求解。

通过实验,我对队列的应用有了更加深入的了解,了解到队列可以解决需要按顺序处理的问题,如排队和迷宫求解等。

实验四:链表的应用链表是一种常用的数据结构,本实验要求利用链表实现学生信息管理系统。

通过实验,我对链表的应用有了更深入的了解,了解到链表可以方便地实现对于数据的插入、删除和修改等操作,并且可以动态地调整链表的长度,适应不同的需求。

通过本次实验,我掌握了线性表、栈、队列和链表的基本操作,并了解了它们的特点和应用方式。

同时,通过实际编程的过程,我对于数据结构的实现方式和效果有了更直观的认识,也锻炼了自己的编程能力和解决问题的能力。

在实验过程中,我遇到了一些问题,如程序逻辑错误和内存泄漏等,但通过调试和修改,最终成功解决了这些问题,对自己的能力也有了更多的信心。

通过本次实验,我深刻体会到了理论与实践的结合的重要性,也对于数据结构这门课程有了更加深入的理解。

总之,本次数据结构实验给予了我很多有益的启发和收获,对于数据结构的概念、特点和应用有了更深入的理解。

在以后的学习中,我会继续加强对数据结构的学习和研究,不断提高自己的编程能力和解决问题的能力。

数据结构实验三栈和队列的应用

数据结构实验三栈和队列的应用

数据结构实验三栈和队列的应用数据结构实验三:栈和队列的应用在计算机科学领域中,数据结构是组织和存储数据的重要方式,而栈和队列作为两种常见的数据结构,具有广泛的应用场景。

本次实验旨在深入探讨栈和队列在实际问题中的应用,加深对它们特性和操作的理解。

一、栈的应用栈是一种“后进先出”(Last In First Out,LIFO)的数据结构。

这意味着最后进入栈的元素将首先被取出。

1、表达式求值在算术表达式的求值过程中,栈发挥着重要作用。

例如,对于表达式“2 + 3 4”,我们可以通过将操作数压入栈,操作符按照优先级进行处理,实现表达式的正确求值。

当遇到数字时,将其压入操作数栈;遇到操作符时,从操作数栈中弹出相应数量的操作数进行计算,将结果压回操作数栈。

最终,操作数栈中的唯一值就是表达式的结果。

2、括号匹配在程序代码中,检查括号是否匹配是常见的任务。

可以使用栈来实现。

遍历输入的字符串,当遇到左括号时,将其压入栈;当遇到右括号时,弹出栈顶元素,如果弹出的左括号与当前右括号类型匹配,则继续,否则表示括号不匹配。

3、函数调用和递归在程序执行过程中,函数的调用和递归都依赖于栈。

当调用一个函数时,当前的执行环境(包括局部变量、返回地址等)被压入栈中。

当函数返回时,从栈中弹出之前保存的环境,继续之前的执行。

递归函数的执行也是通过栈来实现的,每次递归调用都会在栈中保存当前的状态,直到递归结束,依次从栈中恢复状态。

二、队列的应用队列是一种“先进先出”(First In First Out,FIFO)的数据结构。

1、排队系统在现实生活中的各种排队场景,如银行排队、餐厅叫号等,可以用队列来模拟。

新到达的顾客加入队列尾部,服务完成的顾客从队列头部离开。

通过这种方式,保证了先来的顾客先得到服务,体现了公平性。

2、广度优先搜索在图的遍历算法中,广度优先搜索(BreadthFirst Search,BFS)常使用队列。

从起始节点开始,将其放入队列。

队列实验报告

队列实验报告

1. 了解队列实验的基本概念和设计方法。

2. 掌握队列实验数据的收集和分析方法。

3. 通过实际操作,提高对队列实验的理解和应用能力。

二、实验背景队列实验是一种观察性研究方法,通过对一组人群进行长期追踪观察,以研究某种因素与疾病发生之间的关系。

与临床试验相比,队列实验不受随机分配的影响,更能反映实际情况。

本实验以某地区居民为研究对象,旨在探究某种生活习惯与慢性病发病风险之间的关系。

三、实验方法1. 研究对象:选取某地区1000名居民作为研究对象,年龄在40-70岁之间,性别不限。

2. 数据收集:采用问卷调查和临床检查相结合的方式收集数据。

问卷调查内容包括:年龄、性别、职业、生活习惯、慢性病家族史等;临床检查内容包括:血压、血糖、血脂等生化指标。

3. 数据处理:将收集到的数据进行整理、分类,并录入数据库。

4. 实验分组:根据生活习惯将研究对象分为两组,即暴露组和非暴露组。

5. 统计分析:采用卡方检验、Logistic回归等方法分析两组人群慢性病发病风险差异。

四、实验结果1. 暴露组和非暴露组的基本特征:两组在年龄、性别、职业等方面无显著差异(P>0.05)。

2. 慢性病发病风险:暴露组慢性病发病率为30%,非暴露组慢性病发病率为20%。

经卡方检验,两组慢性病发病率存在显著差异(P<0.05)。

3. Logistic回归分析:以慢性病发病为因变量,生活习惯、年龄、性别等变量为自变量,进行Logistic回归分析。

结果显示,生活习惯对慢性病发病有显著影响(P<0.05)。

1. 队列实验作为一种观察性研究方法,在慢性病研究领域具有重要意义。

本实验通过观察生活习惯与慢性病发病风险之间的关系,为慢性病预防提供了依据。

2. 实验结果显示,生活习惯对慢性病发病有显著影响。

这提示我们在日常生活中,要养成良好的生活习惯,降低慢性病发病风险。

3. 本实验样本量较大,研究结论具有一定的代表性。

但本研究仍存在一些局限性,如地域局限性、样本量等。

【推荐】队列操作实验报告-word范文模板 (12页)

【推荐】队列操作实验报告-word范文模板 (12页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==队列操作实验报告篇一:栈和队列基本操作实验报告实验二堆栈和队列基本操作的编程实现【实验目的】堆栈和队列基本操作的编程实现要求:堆栈和队列基本操作的编程实现(2学时,验证型),掌握堆栈和队列的建立、进栈、出栈、进队、出队等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。

也鼓励学生利用基本操作进行一些应用的程序设计。

【实验性质】验证性实验(学时数:2H)【实验内容】内容:把堆栈和队列的顺序存储(环队)和链表存储的数据进队、出队等运算其中一部分进行程序实现。

可以实验一的结果自己实现数据输入、数据显示的函数。

利用基本功能实现各类应用,如括号匹配、回文判断、事物排队模拟、数据逆序生成、多进制转换等。

【实验分析、说明过程】【思考问题】【实验小结】 ( 总结本次实验的重难点及心得、体会、收获)【附录-实验代码】篇二:队列存储与操作实验报告实验四队列存储与操作一. 实验目的1、掌握队列顺序存储结构(循环队列)及实现及操作2、掌握队列的链接存储结构及实现及操作二. 实验内容1、建立一个空顺序存储结构队列;对已建立的队列进行插入、删除、取队头元素等基本操作。

2、建立一个空链式存储结构队列;对已建立的队列进行插入、删除、取队头元素等基本操作。

三、详细设计:1、顺序队列的实现:#include<iostream>using namespace std;const int Size=100;typedef char DataType;class CirQueue{public:CirQueue() { } ~CirQueue(){} void EnQueue(DataType x){if((rear+1)%Size==front) {} cout<<"队列已经满了"<<endl; return; front=rear=0;//构造队列,初始化一个空的循环队列,front和rear指向};} data[rear]=x; cout<<x<<"已入队"<<endl; return; DataTypeGetQueue()//取队头 { } DataType DeQueue() { } int isEmpty()//是否为空{ } DataType data[Size]; int front,rear; if(front==rear) { } else{ } return 0; return 1; if(isEmpty()) {} front=(front+1)%Size;//队头指针在循环的意义下加 return data[front]; cout<<"队列为空"<<endl; return 0; if(isEmpty()) {} int i; i=(front+1)%Size; return data[i]; cout<<"队列为空"<<endl; return 0; private:int main(){int index; DataType temp; do{cout<<"**********************************"<<endl; cout<<"1、入队操作"<<endl; cout<<"2、取队头操作"<<endl; cout<<"3、出队操作"<<endl;cout<<"4、判断队列是否为空"<<endl; cout<<"5、退出"<<endl;cout<<"**********************************"<<endl; cin>>index;if(index==5){return 0;} switch(index) { case 1:cout<<"请输入要入队的元素"<<endl; cin>>temp; a.EnQueue(temp); break; temp=a.GetQueue();if(temp!=0) { } cout<<"队头的元素为"<<temp<<" "<<endl;case 2: break; temp=a.DeQueue(); if(temp!=0) { } cout<<"出队的元素为"<<temp<<""<<endl; case 3: break; bool temp; temp=a.isEmpty(); if(temp){cout<<"空队"<<endl; cout<<"非空队"<<endl; }else{ case 4:} } break; }while(index); return 0;2、链队列的实现: #include<iostream> using namespace std;const int Size=100; typedef char DataType; struct Node{};class LinkQueue {public:LinkQueue() { } ~LinkQueue(){} void EnQueue(DataType x) {} DataType GetQueue()//取?队ó头? {if(isEmpty()) {} cout<<"队ó列为a空?"<<endl; return 0; auto s=new Node; s->data=x; s->next=NULL;//申Θ?请?一?个?数簓据Y域?为aX的?结á点?s rear->next=s; rear=s; auto head=new Node; head->next=NULL; front=rear=head; DataType data; Node *next;};} return front->next->data; DataType DeQueue() { } int isEmpty()//是?否?为a空? { } Node*front,*rear;//队ó头?和í队ó尾2指?针?if(front==rear) { } else{ } return 0; return 1; if(isEmpty()) {} auto p=new Node;//用?于?暂Y存?队ó头?元a素? DataType x;//用?于?暂Y存?队ó头?数簓据Y p=front->next; x=p->data; front->next=p->next;if (p->next==NULL) { } delete p; return x; rear=front; cout<<"队ó列为a空?"<<endl; return 0; private:int main() {LinkQueue a; int index; DataType temp; do{cout<<"**********************************"<<endl; cout<<"1、¢入?队ó操ù作痢?<<endl;篇三:队列存储与操作实验报告实验四队列存储与操作一、实验目的1、掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,队列顺序存储结构、链式存储结构和循环队列的实现,以便在实际问题背景下灵活运用。

数据队列实验报告总结(3篇)

数据队列实验报告总结(3篇)

第1篇一、实验背景数据结构是计算机科学中一个重要的基础学科,其中队列作为一种常用的数据结构,在计算机科学和实际应用中具有广泛的应用。

队列是一种先进先出(FIFO)的线性表,它允许在表的一端进行插入操作,在另一端进行删除操作。

本实验旨在通过实现队列的基本操作,加深对队列数据结构概念和特性的理解,并掌握其在实际应用中的运用。

二、实验目的1. 理解队列数据结构的概念和特性。

2. 掌握队列的存储结构,包括顺序存储和链式存储。

3. 熟悉队列的基本操作,如入队、出队、队列长度、队列状态判断等。

4. 通过实际编程,提高数据结构应用能力。

三、实验内容1. 队列的顺序存储结构实现:- 定义队列结构体,包含队列长度、队列最大长度、队列首尾指针等。

- 实现队列的初始化、入队、出队、判断队列是否为空、判断队列是否已满等操作。

2. 队列的链式存储结构实现:- 定义队列节点结构体,包含队列数据、指针等。

- 实现队列的初始化、入队、出队、判断队列是否为空、判断队列是否已满等操作。

3. 队列的实际应用:- 使用队列实现广度优先搜索(BFS)算法。

- 使用队列实现单链表反转。

- 使用队列实现表达式求值。

四、实验步骤1. 创建队列结构体,定义队列的基本属性和操作函数。

2. 实现队列的顺序存储结构,包括队列的初始化、入队、出队、判断队列是否为空、判断队列是否已满等操作。

3. 实现队列的链式存储结构,包括队列的初始化、入队、出队、判断队列是否为空、判断队列是否已满等操作。

4. 通过实际编程,验证队列的基本操作是否正确。

5. 使用队列实现实际应用,验证队列在解决问题中的应用价值。

五、实验结果与分析1. 顺序存储结构实现:- 队列的初始化、入队、出队、判断队列是否为空、判断队列是否已满等操作均能正常进行。

- 队列的顺序存储结构在插入和删除操作时,需要移动队列中的元素,因此时间复杂度为O(n)。

2. 链式存储结构实现:- 队列的初始化、入队、出队、判断队列是否为空、判断队列是否已满等操作均能正常进行。

实验报告队列

实验报告队列

一、实验目的1. 理解队列的概念和特点;2. 掌握队列的基本操作,包括入队、出队、查看队列头元素等;3. 能够使用队列解决实际问题。

二、实验环境1. 操作系统:Windows 10;2. 编程语言:C语言;3. 开发环境:Visual Studio 2019。

三、实验内容1. 队列的定义和实现;2. 队列的基本操作;3. 使用队列解决实际问题。

四、实验步骤1. 队列的定义和实现(1)定义队列的数据结构```c#define MAXSIZE 100 // 队列的最大容量typedef struct {int data[MAXSIZE]; // 队列的存储空间int front; // 队列头指针int rear; // 队列尾指针} Queue;```(2)初始化队列```cvoid InitQueue(Queue q) {q->front = 0;q->rear = 0;}```(3)判断队列是否为空```cint IsEmpty(Queue q) {return q->front == q->rear;}```(4)判断队列是否已满```cint IsFull(Queue q) {return (q->rear + 1) % MAXSIZE == q->front; }```2. 队列的基本操作(1)入队操作```cint EnQueue(Queue q, int x) {if (IsFull(q)) {return 0; // 队列已满}q->data[q->rear] = x;q->rear = (q->rear + 1) % MAXSIZE; return 1;}```(2)出队操作```cint DeQueue(Queue q, int x) {if (IsEmpty(q)) {return 0; // 队列为空}x = q->data[q->front];q->front = (q->front + 1) % MAXSIZE; return 1;}```(3)查看队列头元素```cint GetHead(Queue q, int x) {if (IsEmpty(q)) {return 0; // 队列为空}x = q->data[q->front];return 1;}```3. 使用队列解决实际问题(1)实现一个简单的函数,将一个整数数组中的元素按照逆序输出```cvoid ReversePrint(int arr[], int n) {Queue q;InitQueue(&q);for (int i = 0; i < n; i++) {EnQueue(&q, arr[i]);}int x;while (!IsEmpty(&q)) {DeQueue(&q, &x);printf("%d ", x);}printf("\n");}```(2)实现一个函数,计算两个整数序列的交集```cvoid Intersection(int arr1[], int n1, int arr2[], int n2, int result[]) {Queue q;InitQueue(&q);for (int i = 0; i < n1; i++) {EnQueue(&q, arr1[i]);}int x;int i = 0, j = 0;while (!IsEmpty(&q)) {DeQueue(&q, &x);while (i < n2 && arr2[i] < x) {i++;}if (i < n2 && arr2[i] == x) {result[j++] = x;}}result[j] = 0; // 标记交集结束}```五、实验结果与分析1. 实验结果(1)定义队列的数据结构(2)初始化队列(3)判断队列是否为空(4)判断队列是否已满(5)入队操作(6)出队操作(7)查看队列头元素(8)使用队列逆序输出整数数组(9)使用队列计算两个整数序列的交集2. 实验分析通过本次实验,我们掌握了队列的基本概念、数据结构、操作方法以及在实际问题中的应用。

队列实验报告

队列实验报告

队列实验报告队列实验报告引言:队列是一种常见的数据结构,它按照先进先出(FIFO)的原则管理数据。

在计算机科学中,队列被广泛应用于各种算法和数据处理任务中。

本实验旨在通过实际操作和观察,深入了解队列的特性和应用。

实验目的:1. 理解队列的基本概念和特性;2. 学会使用队列进行数据处理;3. 掌握队列在实际问题中的应用。

实验步骤:1. 队列的创建和初始化:首先,我们需要创建一个队列并进行初始化。

队列可以使用数组或链表来实现。

在本实验中,我们选择使用链表实现队列。

通过定义一个队列类,我们可以创建一个空队列,并为其设置头节点和尾节点。

2. 入队操作:入队操作是将元素添加到队列的末尾。

我们可以通过调用队列类的入队方法,在尾节点后插入新的节点。

在插入操作之前,我们需要判断队列是否为空。

如果队列为空,新节点将成为头节点和尾节点;如果队列不为空,新节点将链接到当前尾节点的后面,并成为新的尾节点。

3. 出队操作:出队操作是将队列中的第一个元素移除,并返回该元素的值。

我们可以通过调用队列类的出队方法,将头节点的下一个节点作为新的头节点,并返回旧的头节点的值。

在出队操作之前,我们同样需要判断队列是否为空。

如果队列为空,则无法进行出队操作。

4. 遍历队列:为了观察队列中的元素,我们可以使用遍历操作。

通过遍历队列,我们可以依次访问每个节点,并输出节点的值。

在遍历过程中,我们需要从头节点开始,依次访问每个节点的下一个节点,直到尾节点为止。

实验结果:通过上述实验步骤,我们可以得到以下结果:1. 队列的创建和初始化成功;2. 入队操作能够将元素添加到队列的末尾;3. 出队操作能够将队列中的第一个元素移除,并返回该元素的值;4. 遍历操作能够依次输出队列中的每个元素。

实验应用:队列在实际问题中有着广泛的应用。

以下是一些典型的应用场景:1. 消息队列:在分布式系统中,消息队列被用于异步通信和解耦。

生产者可以将消息发送到队列,而消费者可以从队列中获取消息并进行处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与技术系实验报告专业名称计算机科学与技术课程名称数据结构与算法项目名称实验三队列实验班级学号 1姓名同组人员无实验日期实验三队列实验实验题目:建立含有若干个元素的循环队列和链队列,并分别实现循环队列和链队列的入队和出对操作。

(1)先实现循环队列的入队和出队操作1.问题分析本程序要求实现建立含有若干个元素的循环队列,并实现循环队列的入队和出队操作。

完成该实验需要以下4个子任务:○1定义一个循环队列的存储结构,定义队列的基本算法。

○2定义一个display()函数实现队列元素的输出看入队是否成功○3通过队列的基本算法实现队列的出队操作○4在主函数中完成操作测试数据设计如下:1 2 3 4 562.概要设计为了实现上述程序功能,需要:○1声明一个循环队列○2定义出队列的基本算法,○3通过键盘输入5个整数,入队,出队○4在主函数中先往队列里输入5个元素,然后入队,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。

1)本程序包含7个函数:1主函数main()2.置空队:InitQueue()3.判对空: QueueEmpty()4.判队满:QueueFull()5.入队:Add()6.出队:Delete()7.display()各函数关系如下:InitQueue()QueueEmpty()Main () QueueFull()Add()MainDelete()display()3、详细设计实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。

(1)循环队列#define maxlen 10typedef struct{int data [maxlen];int front;int rear;}SeqQueue;(2)队列基本算法SeqQueue *InitQueue(SeqQueue *q) //建立一个空循环队列{q=(SeqQueue *)malloc(sizeof (SeqQueue));q->front=0;q->rear=0;return q;}int QueueFull (SeqQueue *q){ //判断队列是否为满if (q->front==(q->rear+1)%maxlen)return 1;else return 0;}int QueueEmpty(SeqQueue *q){ //判断队列是否为空if (q->rear==q->front)return 1;else return 0;}void Add (SeqQueue *q,int x) //入队{if(!QueueFull(q)){q->rear=(q->rear+1)%maxlen;q->data[q->rear]=x;}else printf ("queue full");}void Delete(SeqQueue *q){ //出队if (!QueueEmpty(q))q->front=(q->front+1)%maxlen;else printf ("queue Empty");}(3)用display()函数输出循环队列元素void display(SeqQueue *q) //输出循环队列q的元素{int i;if(q->front!=q->rear) //循环队列非空,输出队列元素{printf("输出循环队列元素:");i=q->front;do{i=(i+1)%maxlen;printf("%d",q->data[i]);}while(i!=q->rear);}elseprintf("队列为空!");}(4)在主函数中先往队列里输入5个元素,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。

int main(){SeqQueue *q;int i,y;q=InitQueue(q); //建立空循环队列printf("请输入5个元素");for(i=0;i<5;i++) //入队5个元素{scanf("%d",&y);Add(q,y);}display(q); //输出循环队列元素for(i=0;i<5;i++) //把5个元素出队{Delete(q);}printf("\n请输入1个元素");scanf("%d",&y); //再入队一个元素Add(q,y);display(q); //再输出循环队列元素return 0;}4、调试分析编译无错误5、用户使用说明程序名为class1.exe,在DEBUG文件夹里面。

运行环境Visual c++ 6.0。

6、测试结果7、附录#include <stdio.h>#include <stdlib.h>#define maxlen 10typedef struct{int data [maxlen];int front;}SeqQueue;SeqQueue *InitQueue(SeqQueue *q) //建立一个空循环队列{q=(SeqQueue *)malloc(sizeof (SeqQueue));q->front=0;q->rear=0;return q;}int QueueFull (SeqQueue *q){ //判断队列是否为满if (q->front==(q->rear+1)%maxlen)return 1;else return 0;}int QueueEmpty(SeqQueue *q){ //判断队列是否为空if (q->rear==q->front)return 1;else return 0;}void Add (SeqQueue *q,int x) //入队{if(!QueueFull(q)){q->rear=(q->rear+1)%maxlen;q->data[q->rear]=x;}else printf ("queue full");}void Delete(SeqQueue *q){ //出队if (!QueueEmpty(q))q->front=(q->front+1)%maxlen;else printf ("queue Empty");}void display(SeqQueue *q) //输出循环队列q的元素{int i;if(q->front!=q->rear) //循环队列非空,输出队列元素{printf("输出循环队列元素:");i=q->front;{i=(i+1)%maxlen;printf("%d",q->data[i]);}while(i!=q->rear);}elseprintf("队列为空!");}int main(){SeqQueue *q;int i,y;q=InitQueue(q); //建立空循环队列printf("请输入5个元素");for(i=0;i<5;i++) //入队5个元素{scanf("%d",&y);Add(q,y);}display(q); //输出循环队列元素for(i=0;i<5;i++) //把5个元素出队{Delete(q);}printf("\n请输入1个元素");scanf("%d",&y); //再入队一个元素Add(q,y);display(q); //再输出循环队列元素return 0;}(2)实现链队列的入队和出队操作1.问题分析本程序要求实现建立含有若干个元素的链队列,并实现链队列入队和出队操作。

完成该实验需要以下4个子任务:○1定义一个链队列的存储结构,定义链队列的基本算法。

○2定义一个display()函数实现队列元素的输出看入队是否成功○3通过队列的基本算法实现队列的出队操作○4在主函数中完成操作测试数据设计如下:1 2 3 4 562.概要设计为了实现上述程序功能,需要:○1声明一个链队列○2定义出链队列的基本算法,○3通过键盘输入5个整数,入队,出队○4在主函数中先往队列里输入5个元素,然后入队,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。

2)本程序包含6个函数:1主函数main()2.置空队:InitQueue()3.判对空: QueueEmpty()4.入队:Add()5.出队:Delete()6.display()各函数关系如下:SetQueue()QueueEmpty()Main () Add()Delete()display()4、详细设计实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。

(1)链队列#define maxlen 10typedef struct node{int data;struct node *next;}LinkList;typedef struct{LinkList *front,*rear;}LinkQueue;LinkQueue *q;(2)队列基本算法LinkQueue *SetQueue() //建立一个空链队列{q=(LinkQueue *)malloc(sizeof (LinkQueue));q->front=(LinkList *)malloc(sizeof(LinkList));q->front->next=NULL;q->rear=q->front;return q;}int QueueEmpty(LinkQueue *q){ //判断队列是否为空if (q->rear==q->front)return 1;else return 0;}LinkQueue *Add (LinkQueue *q,int x) //入队{LinkList *p;p=(LinkList *)malloc(sizeof (LinkList));p->data=x;p->next=NULL;q->rear->next=p;q->rear=p;return q;}LinkQueue *Delete(LinkQueue *q){ //出队LinkList *p;if (!QueueEmpty(q)){p=q->front->next;q->front->next=p->next;if(p->next=NULL)q->rear=q->front;free(p);return q;}else printf ("queue Empty");}(3)用display()函数输出链队列元素void display(LinkQueue *q) //输出链队列的元素{LinkList *p;p=q->front->next;if(p!=NULL){printf("输出链队元素");while(p!=NULL){printf("%2d",p->data);p=p->next;}}else printf("\n链队为空");}(4)在主函数中先往队列里输入5个元素,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。

相关文档
最新文档