数据结构实验——队列(附程序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三队列
一、实验目的
1.了解队列的特性。
2.掌握队列的顺序表示和实现。
3.掌握队列的链式表示和实现。
二、实验内容
实验3. 3队列的顺序表示和实现
编写一个程序实现顺序队列的各种基本运算(采用循环队列),并在此基础上设计一个主程序,完成如下功能:
(1)初始化队列。
(2)建立顺序队列。
(3)入队。
(4)出队。
(5)判断队列是否为空。
(6)取队头元素。
(7)遍历队列。
实验3.4队列的链式表示和实现
编写一个程序实现链队列的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化并建立链队列。
(2)入链队列。
(3)出链队列。
(4)遍历链队列。
#include
#include
#define MAXQSIZE 100
typedef struct
{
int *base;
int front;
int rear;
}SqQueue;
int InitQueue(SqQueue &Q)
{
Q.base=(int*)malloc(MAXQSIZE*sizeof(int));
if(!Q.base)exit(0);
Q.front=Q.rear=0;
return 0;
}//初始化顺序队列
int QueueLength(SqQueue Q)
{
int i;
i=(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
printf("队列长度%5d\n",i);
if(i)printf(" 队列非空");
else
printf(" 队列为空");
return 0;
}//判断队列是否为空
int EnQueue(SqQueue &Q,int e)
{
if((Q.rear+1)%MAXQSIZE==Q.front)return 0;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return 0;
}//将元素e入队
int DeQueue(SqQueue &Q,int e)
{
if(Q.front==Q.rear)return 0;
e=Q.base[Q.front];
printf("%5d\n",e);
Q.front=(Q.front+1)%MAXQSIZE;
return 0;
}// 删除元素e并返回其值
int GetHead(SqQueue &Q,int e)
{
if(!(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE)return 0;
e=Q.base[Q.front];
printf("返回队头元素%5d\n",e);
return 0;
}//返回队头元素e
void PrintQueue(SqQueue &Q)
{
int k;
printf("顺序队列中的元素:\n");
for(k=Q.front;k!=Q.rear;k++)
printf("%5d",Q.base[k]);
printf("\n");
}//遍历顺序队列
void main()
{
int e,i,n;
SqQueue Q;
InitQueue(Q);
printf("1—元素入队;2—元素出队;3—返回队头元素;4—队列空否0—结束运行\n"); printf("\n");printf("\n");printf("\n");
printf("\n");printf("\n");
printf("选择: ");
scanf("%d",&n);
printf("\n");printf("\n");
while(n!=0)
{
switch(n)
{
case 1:printf("入队元素:
");scanf("%d",&e);EnQueue(Q,e);PrintQueue(Q);printf("\n");printf("\n");br eak;
case 2:printf("出队元素:
");DeQueue(Q,e);PrintQueue(Q);printf("\n");printf("\n");break;
case 3:GetHead(Q,e);printf("\n");printf("\n");break;
case 4:QueueLength(Q);printf("\n");printf("\n");break;
}
printf("选择: ");
scanf("%d",&n);
printf("\n");printf("\n");
}
printf("结束运行。再见!\n");
}
链式队列
#include
#include
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;//队头指针
QueuePtr rear;//队尾指针
}LinkQueue;
int InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)exit(0);
Q.front->next=NULL;
return 0;
}//初始化链式队列
int EnQueue(LinkQueue &Q,int e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)exit(0);
p->data=e;p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return 0;
}//在队尾插入元素e
int DeQueue(LinkQueue &Q,int e)
{
QueuePtr p;