队列的入队出队初始化操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实践考核题第一题设计报告书
部
调用函数enqueue(queue,x),通过移动首指针找到要入队的数据,直到把队列的空间占满。有数据要进入队列时,调用该函数把数据元素x插入到队列中,先判断队列是否已满让后才能把数据元素插入到队尾。
3)出队 dequeue ( queue ) 删除队列 queue 的队头元素,函数返
回被删除元素的值
通过移动首指针把队首的指针往下移动一个地址,这样就把一个元素数据出队了。当要出队时,队列是从头指针开始一系列操作。先判断该队列是否为空队列,如果不是的话,在进行出队操作把头指针往上移一个地址,这样就把数据出队了。
4)判队列是否为空 EmptyQueue( queue ) 若队列que为空,函数返
回 0 ,否则返回 1
判断队列的为空的条件是(queue.rear==queue.front)如果为空返回数值1,否则返回0。当出队操作时,需要判断队列是否为空,调用该函数。
详细设计
#include
//带头结点的循环链表表示队列
#define maxsize 10
typedef struct
{
int data[maxsize];
int front;
int rear;
}queue;
//初始化队列
queue setnull(queue CQ)
{
CQ.front=0;
CQ.rear=0;
return CQ ;
}
//判断队列是否为空
int EmptyQueue(queue CQ)
{
if(CQ.rear==CQ.front)
//队列为空,返回1
return 1;
else
return 0;
}
//入队列
queue enqueue(queue CQ,int x)
{
if((CQ.rear+1)%maxsize==CQ.front) {//队列空间已满
printf("queue full");
}
else
{
//将尾指针后移
CQ.rear=(CQ.rear+1)%maxsize;
//并显示尾指针位置
printf("see what CQ.rear is :%d\n",CQ.rear);
//存入数据
CQ.data[CQ.rear]=x;
}
return CQ;//返回修改后的队列
}
//出队列
queue dequeue(queue CQ)
{//判断队列是否为空
if(EmptyQueue(CQ))
{
printf("space queue\n");
}
else
{
//记录将要清除的数据
int x=CQ.data[(CQ.front+1)%maxsize];
//头指针后移
CQ.front=(CQ.front+1)%maxsize;
//输出清除掉的数据
printf("the deleted data %d\n", x);
}
return CQ;
}
//主函数
int main()
{
queue que;
int x;
//调用置空函数
que=setnull(que);
printf("please put the data (put 999 end):\n");
for(int i=0;i<9;i++)
{//循环调用入队函数
scanf("%d",&x);
//限定结束符号
if(x==999)
{
printf("put data end.\n");
break;
情形二:
一个数据也不输入,直接结束数据的录入,会看到空队列提示信息(space queue)。
设计总结
对于队列的操作首先需要把队列置空,然后插入数据元素,在插入元素时需要判断是否队列已满,在数据元素出队时需要先对队列判断是否为空,如果为空时结束程序继续执行,否则继续执行出队操作。
通过关于队列的实践操作,重新巩固了关于队列使用的操作要求,复习了关于调用函数以及通过调用函数更改数值的算法。