班级 电信091 学号 200906020127 姓名 张成 实验组别 实验日期 2012/3/29 室温 15 报告日期 2012/3/28 成绩 报告内容:(目的和要求,原理,步骤,数据,计算,小结等)
实验名称:《队列设计与应用》(实验报告) 一、实验目的:
1、掌握队列的原理;
2、熟悉队列的设计与应用。
二、实验内容:
设计自己的顺序队列(只处理整数,非通用),实现队列的基本功能:入队、出队; 对上述功能进行测试(编写测试程序,验证你所设计的队列的正确性)。
三、实验方法:
顺序队列的描述:
#define QUEUESIZE 100
typedef int DataType; typedef struct{
DataType items[QUEUESIZE]; int front,rear; }SqQueue;;
顺序队列的基本操作: 出队: int DeQueue(SqQueue *Q,DataType *e)
{ if(Q->front == Q->rear) { printf(\"队列已空\\n\"); return 0; } *e=Q->items[Q->front];// Q->front=(Q->front+1)%QUEUESIZE; return 1; }
入队
第 1 页
附 页
int EnQueue(SqQueue *Q,DataType e) {
if((Q->rear+1)%QUEUESIZE == Q->front) { printf(\"队列已满\\n\"); return 0; }
Q->items[Q->rear]=e;//
Q->rear=(Q->rear+1)%QUEUESIZE; return 1; }
四、实验源码
//=====Header Files :Queue.h
//=====================定义=========================================
#define QUEUESIZE 100 typedef int DataType; typedef struct{ DataType items[QUEUESIZE]; int front,rear; }SqQueue;
int EnQueue(SqQueue *Q,DataType e); int DeQueue(SqQueue *Q,DataType *e); int TraverseQueue(SqQueue Q) ; int QueueEmpty(SqQueue Q); int InitQueue(SqQueue *Q);
//=====Source Files LinkListmain.c 与LinkListwork.c
//==============Listmain.c ============================================ //文件名称: LinkListmain.c //功能说明:实现出入队列 //资源说明:
//创建日期: 2012-04-05 //软件版本: v 1.0
//==================================================================
第 2 页
附 页
#include \"malloc.h\" #include //================================================================== //函数名: main() //输入参数: //输出参数: //设计者: //创建日期: //================================================================== void main() { //int nu,stp; //scanf(\"%d\ ///scanf(\"%d\ int e; int tim[6][2]; SqQueue q; InitQueue(&q); EnQueue(&q,10); TraverseQueue(q); DeQueue(&q,&e); TraverseQueue(q); DeQueue(&q,&e); TraverseQueue(q); } //================================================================== ============================================ //文件名称: Stackwork.c //功能说明:入队列,出队列,初始化等的具体实现 //资源说明: //创建日期: 2012-04-5 //软件版本: v 1.0 //======================================================== int DeQueue(SqQueue *Q,DataType *e) { if(Q->front == Q->rear) 第 3 页 附 页 { printf(\"队列已空\\n\"); return 0; } *e=Q->items[Q->front];// Q->front=(Q->front+1)%QUEUESIZE; return 1; } int EnQueue(SqQueue *Q,DataType e) { if((Q->rear+1)%QUEUESIZE == Q->front) { printf(\"队列已满\\n\"); return 0; } Q->items[Q->rear]=e;// Q->rear=(Q->rear+1)%QUEUESIZE; return 1; } int InitQueue(SqQueue *Q) { Q->front=0; Q->rear=0; return 1; } int QueueEmpty(SqQueue Q) { if(Q.rear==Q.front) return 1; else return 0; } int TraverseQueue(SqQueue Q) { int pos; pos=Q.front; while((pos+1)%QUEUESIZE<=Q.rear) { 第 4 页 附 页 printf(\"% d\\ pos++; } printf(\"\\n\"); return 1; } 五、实验结果: 灵活应用算法InitQueue,实现队列的初始化; 应用算法EnQueue,实现堆栈的入队; 应用算法DeQueue,实现堆栈的出队; 应用算法TraverseQueue,实现队列的遍历。 六、实验心得 a) 堆栈的的空间创建靠包\"malloc.h\"开辟空间; b) 堆栈应用于物理地址连续的数据存储情况; c) 程序运用一个头文件,声明了顺序表的各个操作,然后在C文件中给于删除,插入,初始化等 具体操作的实现.操作者在主函数中将头文件包含,即实现主函数里对相关功能块的使用。实现模块化思想的应用。 第 5 页 附 页 第 6 页 因篇幅问题不能全部显示,请点此查看更多更全内容