队列的入队出队初始化操纵.docx

上传人:b****1 文档编号:13212098 上传时间:2023-06-12 格式:DOCX 页数:6 大小:86.19KB
下载 相关 举报
队列的入队出队初始化操纵.docx_第1页
第1页 / 共6页
队列的入队出队初始化操纵.docx_第2页
第2页 / 共6页
队列的入队出队初始化操纵.docx_第3页
第3页 / 共6页
队列的入队出队初始化操纵.docx_第4页
第4页 / 共6页
队列的入队出队初始化操纵.docx_第5页
第5页 / 共6页
队列的入队出队初始化操纵.docx_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

队列的入队出队初始化操纵.docx

《队列的入队出队初始化操纵.docx》由会员分享,可在线阅读,更多相关《队列的入队出队初始化操纵.docx(6页珍藏版)》请在冰点文库上搜索。

队列的入队出队初始化操纵.docx

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

实践考核题第一题设计报告书

学生姓名

 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//头文件

//带头结点的循环链表表示队列

#definemaxsize10

typedefstruct

{

intdata[maxsize];

intfront;

intrear;

}queue;

//初始化队列

queuesetnull(queueCQ)

{

CQ.front=0;

CQ.rear=0;

returnCQ;

}

//判断队列是否为空

intEmptyQueue(queueCQ)

{

if(CQ.rear==CQ.front)

//队列为空,返回1

return1;

else

return0;

}

//入队列

queueenqueue(queueCQ,intx)

{

if((CQ.rear+1)%maxsize==CQ.front)

{//队列空间已满

printf("queuefull");

}

else

{

//将尾指针后移

CQ.rear=(CQ.rear+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);

printf("pleaseputthedata(put999end):

\n");

for(inti=0;i<9;i++)

{//循环调用入队函数

scanf("%d",&x);

//限定结束符号

if(x==999)

{

printf("putdataend.\n");

break;

}

else

{

que=enqueue(que,x);

}

}

//清除队列头元素,并返回删除的数据

que=dequeue(que);

getch();

return0;

}

 

调试分析

调试使用的Code:

Blocks10.05

情形一:

输入{8,9,4,5,1}5个数据后结束,可以看到数据输入结束提示信息(putdataend),后面紧跟着是头指针后移前的第一个元素:

8

情形二:

一个数据也不输入,直接结束数据的录入,会看到空队列提示信息(spacequeue)。

设计总结

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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2