队列的入队出队初始化操纵.docx
《队列的入队出队初始化操纵.docx》由会员分享,可在线阅读,更多相关《队列的入队出队初始化操纵.docx(7页珍藏版)》请在冰豆网上搜索。
队列的入队出队初始化操纵
实践考核题第一题设计报告书
学生姓名
XXX
学生学号
099XXX
所在地区
XXX
提交日期(年/月)
2014/6
实践题目
利用队列的结构解决实际问题
需求分析
置空函数:
根据函数的形参,即传递进来的队列指针,调用它的首指针和尾指针让两个指针相等,就把队列中的元素全部清空。
入队函数:
首先判断该队列是否已满,如果队列已满,就退出操作。
否则,执行入队操作的语句,由于是循环队列所以在移动尾指针时,要把尾指针的位置取余运
算(queue.rear=(queue.rear+1)%maxsize;),然后把数据元素赋给尾指针
(queue,data[queue.rear]=x;)。
出队函数:
当有数据元素要出队时,首先判断该队列是否为空,如果为空时,元素出队列失败。
否则,当队列不为空时,执行出队操作
(queue.front=(queue.front+1)%maxsize;)返回数值1,说明出队成功。
判空函数:
该函数是用来判断队列是否为空的,是被别的函数调用作为判断条件用,若果为空的话就返回数值0,标志不能继续执行下面的语句。
判断为空的条件是:
queue.rear==queue.front;如果为空返回值为1,否则返回值为0。
概要设计
1)置空setnull(queue)将队列queue置成空队列
调用setnull(queue)函数把队列queue的顶端指针和低端指针指向同一块地
址,这样就把队列置空。
当队列中的数据元素不用或者必须要清楚的时候,就必
须调用该函数把队列中的数据清空才能在插入新的数据供用户操作使用。
2)入队enqueue(queue,x)将元素x插入队歹Uqueue的
尾部
调用函数enqueue(queue,x),通过移动首指针找到要入队的数据,直到把队列的空间占满。
有数据要进入队列时,调用该函数把数据元素x插入到队列中,
先判断队列是否已满让后才能把数据元素插入到队尾。
3)出队dequeue(queue)删除队列queue的队头元素,函数
返回被删除元素的值
通过移动首指针把队首的指针往下移动一个地址,这样就把一个元素数据出队了。
当要出队时,队列是从头指针开始一系列操作。
先判断该队列是否为空队列,如果不是的话,在进行出队操作把头指针往上移一个地址,这样就把数据
出队了。
4)判队列是否为空EmptyQueue(queue)若队列que为空,函数返回0,否则返回1
判断队列的为空的条件是(queue.rear==queue.front)如果为空返回数值
1,否则返回0。
当出队操作时,需要判断队列是否为空,调用该函数。
详细设计
#include〃头文件
//带头结点的循环链表表示队列
#definemaxsize10
typedefstruct
{
intdata[maxsize];
intfront;
intrear;
}queue;
//初始化队列
queuesetnull(queueCQ)
CQ.front=0;
CQ.rear=0;returnCQ;
}
//判断队列是否为空
intEmptyQueue(queueCQ)
{
if(CQ.rear==CQ.front)//队列为空,返回1return1;
else
return0;
}
//入队列
queueenqueue(queueCQ,intx)
if((CQ.rear+1)%maxsize==CQ.front)
{//队列空间已满
printf("queuefull");
}
else
{
//将尾指针后移
CQ.rear=(CQ.rea叶1)%maxsize;
//并显示尾指针位置
printf("seewhatCQ.rearis:
%d\n",CQ.rear);
//存入数据
CQ.data[CQ.rear]=x;
}
returnCQ;//返回修改后的队列
//出队列
queuedequeue(queueCQ)
{//判断队列是否为空
if(EmptyQueue(CQ))
{
printf("spacequeue'n");
}
else
{
//记录将要清除的数据
intx=CQ.data[(CQ.front+1)%maxsize];
//头指针后移
CQ.front=(CQ.front+1)%maxsize;
//输出清除掉的数据
printf("thedeleteddata%d\n",x);
}
returnCQ;
}
//主函数
intmain()
{
queueque;
intx;
//调用置空函数
que=setnull(que);
):
\n");
printf("pleaseputthedata(put999end
for(inti=0;i<9;i++)
{〃循环调用入队函数
seanf("%d",&x);
//限定结束符号
if(x==999)
{
printf("putdataend.\n");break;
}
else
{
que=enqueue(que,x);
}
}
//清除队列头元素,并返回删除的数据
que=dequeue(que);
getch();
return0;
调试分析
调试使用的Code:
:
Blocks10.05
情形一:
put
输入{8,9,4,5,1}5个数据后结束,可以看到数据输入结束提示信息(
dataend),后面紧跟着是头指针后移前的第一个元素:
8
情形二:
一个数据也不输入,直接结束数据的录入,会看到空队列提示信息(space
queue)。
设计总结
对于队列的操作首先需要把队列置空,然后插入数据元素,在插入元素时需
要判断是否队列已满,在数据元素出队时需要先对队列判断是否为空,如果为
空时结束程序继续执行,否则继续执行出队操作。
通过关于队列的实践操作,重新巩固了关于队列使用的操作要求,复习了关于调用函数以及通过调用函数更改数值的算法。