1、队列的入队出队初始化操纵实践考核题第一题设计报告书学生姓名XXX学生学号099XXX所在地区XXX提交日期(年/月)2014/6实践题目利用队列的结构解决实际问题需求分析置空函数:根据函数的形参,即传递进来的队列指针,调用它的首指针和尾 指针让两个指针相等,就把队列中的元素全部清空。入队函数:首先判断该队列是否已满,如果队列已满,就退出操作。否则, 执行入队操作的语句,由于是循环队列所以在移动尾指针时, 要把尾指针的位置取余运算(queue.rear=(queue.rear+1)%maxsize; ),然后把数据元素赋给尾指针(queue,dataqueue.rear=x;) 。出队函数:当有
2、数据元素要出队时,首先判断该队列是否为空,如果为空 时,元素出队列失败。否则,当队列不为空时,执行出队操作(queue.fro nt=(queue.fro nt+1)%maxsize; )返回数值 1,说明出队成功。判空函数:该函数是用来判断队列是否为空的,是被别的函数调用作为判 断条件用,若果为空的话就返回数值0,标志不能继续执行下面的语句。判断为 空的条件是:queue.rear=queue.fro nt ;如果为空返回值为1,否则返回值为 0。概要设计1)置空set null (queue ) 将队列queue 置成空队列调用setnull(queue)函数把队列queue的顶端指针和低
3、端指针指向同一块地址,这样就把队列置空。当队列中的数据元素不用或者必须要清楚的时候, 就必须调用该函数把队列中的数据清空才能在插入新的数据供用户操作使用。2)入队 enqueue ( queue , x ) 将元素 x 插入队歹U queue 的尾部调用函数enqueue(queue,x),通过移动首指针找到要入队的数据,直到把队 列的空间占满。有数据要进入队列时,调用该函数把数据元素 x插入到队列中,先判断队列是否已满让后才能把数据元素插入到队尾。3)出队dequeue ( queue ) 删除队列queue 的队头元素,函数返回被删除元素的值通过移动首指针把队首的指针往下移动一个地址,这样
4、就把一个元素数据 出队了。当要出队时,队列是从头指针开始一系列操作。 先判断该队列是否为空 队列,如果不是的话,在进行出队操作把头指针往上移一个地址, 这样就把数据出队了。4)判队列是否为空 EmptyQueue( queue ) 若队列que为空,函 数返回0 ,否则返回1判断队列的为空的条件是 (queue.rear=queue.fro nt )如果为空返回数值1,否则返回0。当出队操作时,需要判断队列是否为空,调用该函数。详细设计#i nclude 头文件/带头结点的循环链表表示队列#defi ne maxsize 10typedef structint datamaxsize;int
5、front;in t rear;queue;/初始化队列queue set nu ll(queue CQ)CQ.fro nt=0;CQ.rear=0; return CQ ;/判断队列是否为空int EmptyQueue(queue CQ)if(CQ.rear=CQ.fro nt) /队列为空,返回1 return 1;elsereturn 0;/入队列queue enq ueue(queue CQ,i nt x)if(CQ.rea r+1)%maxsize=CQ.fro nt)/队列空间已满prin tf(queue full);else/将尾指针后移CQ.rear=(CQ.rea 叶1)%
6、maxsize;/并显示尾指针位置prin tf(see what CQ.rear is :%dn,CQ.rear);/存入数据CQ.dataCQ.rear=x;return CQ;/返回修改后的队列/出队列queue dequeue(queue CQ)/判断队列是否为空if(EmptyQueue(CQ)prin tf(space queue n);else/记录将要清除的数据int x=CQ.data(CQ.fro nt+1)%maxsize;/头指针后移CQ.fro nt=(CQ.fro nt+1)%maxsize;/输出清除掉的数据printf(the deleted data %dn,
7、 x);return CQ;/主函数int main()queue que;int x;/调用置空函数que=set nu ll(que);):n);prin tf(please put the data (put 999 endfor(int i=0;i9;i+)循环调用入队函数sea nf(%d, &x);/限定结束符号if(x=999)prin tf(put data en d.n); break;elseque=e nq ueue(que,x);/清除队列头元素,并返回删除的数据que=dequeue(que);getch();return 0;调试分析调试使用的 Code : Blocks10.05情形一:put输入8, 9,4,5,15个数据后结束,可以看到数据输入结束提示信息(data end ),后面紧跟着是头指针后移前的第一个元素: 8情形二:一个数据也不输入,直接结束数据的录入,会看到空队列提示信息(spacequeue )。设计总结对于队列的操作首先需要把队列置空,然后插入数据元素,在插入元素时需要判断是否队列已满,在数据元素出队时 需要先对队列判断是否为空,如果为空时 结束程序继续执行,否则继续执行出队操作。通过关于队列的实践操作,重新巩固了关于队列使用的操作要求, 复习了关 于调用函数以及通过调用函数更改数值的算法。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1