实验三队列实验报告

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

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

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

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

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

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

(1)循环队列
#define maxlen 10
typedef 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);
}
else
printf("队列为空!");
}
(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 10
typedef struct{
int data [maxlen];
int front;
int rear;
}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;
do
{
i=(i+1)%maxlen;
printf("%d",q->data[i]);
}while(i!=q->rear);
}
else
printf("队列为空!");
}
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 5
6
2.概要设计
为了实现上述程序功能,需要:○1声明一个链队列○2定义出链队列的基本算法,○3通过键盘输入5个整数,入队,出队○4在主函数中先往队列里输入5个元素,然后入队,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。

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

(1)链队列
#define maxlen 10
typedef 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()函数看是否出队。

int main()
{
int i,y=0;
SetQueue(); //建立空链队列
display(q) ;
printf("\n请输入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);
}
display(q); //看是否出队成功
return 0;
}
4、调试分析
编译无错误
5、用户使用说明
程序名为class12exe,在DEBUG文件夹里面。

运行环境Visual c++ 6.0。

6、测试结果
7、附录
#include <stdio.h>
#include <stdlib.h>
#define maxlen 10
typedef struct node{
int data;
struct node *next;
}LinkList;
typedef struct{
LinkList *front,*rear;
}LinkQueue;
LinkQueue *q;
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");
}
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链队为空");
}
int main()
{
int i,y=0;
SetQueue(); //建立链队列
display(q) ;
printf("\n请输入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);
}
display(q); //看是否出队成功
return 0;
}
实验题目2:写出下列程序段的输出结果,并通过程序运行来验证1.问题分析
完成该实验需要以下4个子任务:
○1定义一个循环队列的存储结构,定义队列的基本算法。

○2定义一个print()函数实现程序
○3通过队列的基本算法实现队列的出队操作
○4在主函数中完成操作
测试数据设计如下:
2.概要设计
为了实现上述程序功能,需要:○1声明一个循环队列○2定义出队列的基本算法,○3在主函数调用print()函数看是否出队。

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

(1)循环队列
#define maxlen 10
typedef struct{
char 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;
}
char GetHead(SeqQueue *q){ //取栈顶元素
if(!QueueEmpty(q))
return q->data[(q->front+1)%maxlen];
else printf("queue Empty");
}
void Add (SeqQueue *q,char 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)用print()函数验证程序
void print(SeqQueue *q)
{
char x,y,t;
x='e';y='c';
Add(q,'h');
Add(q,'r');
Add(q,y);
x=GetHead(q);
Delete(q);
Add(q,x);
x=GetHead(q);
Delete(q);
Add(q,'a');
while (QueueEmpty(q)==0){
y=GetHead(q);
Delete(q);
printf("%c",y);
}
printf("%c",x);
}
(4)在主函数中调用print()函数验证程序
int main()
{
SeqQueue *q;
q=InitQueue(q);
print(q);
return 0;
}
4、调试分析
编译无错误
5、用户使用说明
程序名为class2.exe,在DEBUG文件夹里面。

运行环境Visual c++ 6.0。

6、测试结果
7、附录
#include <stdio.h>
#include <stdlib.h>
#define maxlen 10
typedef struct{
char data [maxlen];
int front;
int rear;
}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;
}
char GetHead(SeqQueue *q){ //取栈顶元素if(!QueueEmpty(q))
return q->data[(q->front+1)%maxlen];
else printf("queue Empty");
}
void Add (SeqQueue *q,char 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 print(SeqQueue *q)
{
char x,y,t;
x='e';y='c';
Add(q,'h');
Add(q,'r');
Add(q,y);
x=GetHead(q);
Delete(q);
Add(q,x);
x=GetHead(q);
Delete(q);
Add(q,'a');
while (QueueEmpty(q)==0){ y=GetHead(q);
Delete(q);
printf("%c",y);
}
printf("%c",x);
}
int main()
{
SeqQueue *q;
q=InitQueue(q);
print(q);
return 0;
}。

相关文档
最新文档