队列地入队出队初始化操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实践考核题第一题设计报告书
学生姓名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 插入队列 queue 的尾
部
调用函数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;