队列的入队出队初始化操作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)。

设计总结

对于队列的操作首先需要把队列置空,然后插入数据元素,在插入元素时需要判断是否队列已满,在数据元素出队时需要先对队列判断是否为空,如果为空时结束程序继续执行,否则继续执行出队操作。

通过关于队列的实践操作,重新巩固了关于队列使用的操作要求,复习了关于调用函数以及通过调用函数更改数值的算法。

相关文档
最新文档