实验二 队列管理模拟
二、实验目的
1.熟悉用C或C++进行程序设计的方法。
2.掌握队列的基本操作:创建、入队、出队等运算。
三、实验题目
队列管理的模拟算法采用如下管理模式:(队列采用链式存储结构)
(1)初始化一个空链队列
(2)当从键盘输入奇数时,奇数从队尾入队列;
(3)当从键盘输入偶数时,若队列不空,则队头出队;
(4)当从键盘输入0时,退出算法;
(5)每输入一个整数,显示操作后队列中的所有值。
【测试数据】:
键盘输入整数:1
打印当前队列: 1
键盘输入一个整数:3
打印当前队列: 1 3
键盘输入一个整数:5
打印当前队列: 1 3 5
键盘输入一个整数:7
打印当前队列: 1 3 5 7
键盘输入一个整数:1
打印当前队列: 1 3 5 7 1
键盘输入一个整数:11
打印当前队列: 1 3 5 7 1 11
键盘输入一个整数:2
打印当前队列: 3 5 7 1 11
键盘输入一个整数:4
打印当前队列: 5 7 1 11
键盘输入一个整数:7
打印当前队列: 5 7 1 11 7
键盘输入一个整数:0
打印当前队列: 5 7 1 11 7 (算法结束)
1.实验题目。
2.程序中使用的数据结构及符号说明。
3.主要算法描述及其流程图。
4.打印一份源程序并附上注释。
5.打印程序运行时的初值和运行结果。
#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int QElemType;
#define ERROR 0
#define NULL 0
#define OK 1
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q)//构造一个空队列Q
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
printf(“OVERFLOW”);
Q.front->next=NULL;
return OK;
}
Status EnQueue(LinkQueue &Q,QElemType e)//插入元素e为Q的新的队尾元素
{
QNode *p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
printf(“OVERFLOW”);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
Status DeQueue(LinkQueue &Q,QElemType e)//若队列不空,则删除Q的对头元素,用e返回其值,
{
QNode *p;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
return OK;
}
Status printQueue(LinkQueue &Q)//输出队列中元素
{
QNode *p;
p=Q.front;
printf(“当前队列:/n”);
while(p!=Q.rear)
{
printf(“%d/t”,p->next->data);
p=p->next;
}
return OK;
}
void main()
{
int n;
LinkQueue a;
InitQueue(a);
printf(“输入一个整数:/n”);
scanf(“%d”,&n);
while(n!=0)
{
if(n%2==1)//判断奇偶数
{
EnQueue(a,n);
printQueue(a);
}
else
{
DeQueue(a,n);
printQueue(a);
}
printf(“/n输入下一个整数:/n”);
scanf(“%d”,&n);
}
printQueue(a);
}