队列的实现和应用

班级 信工132 学号[1**********]0姓名王甜甜 实验组别 实验日期 室温 报告日期 成绩 报告内容:(目的和要求、原理、步骤数据、计算、小结等) 实验名称: 队列的实现和应用

实验目的:1. 掌握队列的定义。

2. 掌握队列基本操作的实现。

实验环境(硬/软件要求):

Window 2000,Visual C++6.0

实验要求:

实现队列的出队和入队操作。

实验原理:队列是另一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,队列具有先进先出的特性,这与日常生活中的排队是一致的,最早进入队列的人最早离开,新来的人总是加入到队尾。

为了队列的操作方便,同时避免占用过多的内存空间,通常开辟一个连续的存储空间来存储队列中的元素,并设想这一连续的存储空间来存储队列中的元素,设想这一存储空间是一个首位相连的圆环把这种队列的存储形式形象地叫做循环队列。

实验方案:

1、定义队列类型

Typedef struct

{

ElemType q[Maxsize];

Int front,rear;

} queue

2. 入队操作

Void enq(QU,x)

Queue *QU;

ElemType x;

{

If(QU->rear+1)%Maxsize==QU->front)

Printf(“队列上溢出!\n”);

Else

{

QU->rear=(QU->rear+1)%Maxsize;

QU->q[QU->rear]=x;

}

}

3. 出队操作

Queue *QU;

ElemType *x

{

If((QU->front==QU->rear)printf(“队列下溢出!\n”); Else

{

QU->front=(QU->front+1)%Maxsize;

*x=(QU->q[QU->front]’

}

}

4.判断循环队列是否为空

Int qempty(QU)

Queue *x;

{

If(( QU->front==QU->rear)rturn(1);

Else return(0);

}

实验代码

#include

#define QUEUESIZE 100

typedef int DataType;

typedef struct

{

DataType items[QUEUESIZE];

int front,rear;

int count;

} SqQueue;

SqQueue q;

/*初始化队列*/

void InitQueue(SqQueue *Q)

{

Q->front=0;

Q->count=0;

}

/*入队*/

int EnQueue(SqQueue *Q,DataType item) {

if((Q->rear+1)%QUEUESIZE==Q->front) {

printf("队列已满,不能完成入队操作!\n"); return 0;

}

Q->items[Q->rear]=item;

Q->rear=(Q->rear+1)%QUEUESIZE; Q->count++;

return 1;

}

/*出队*/

int DeQueue(SqQueue *Q,DataType *item) {

if(Q->count

{

printf("队列已空, 不能完成出队操作!\n"); return 0;

}

*item=Q->items[Q->front];

printf("\n出队元素为: %d \n",*item); Q->front=(Q->front+1)%QUEUESIZE; Q->count--;

return 1;

}

int main()

{

int items,i,a,j,k;

int item[10];

char c;

InitQueue(&q);

for(i=0;i

{

printf("请输入入队元素\n");

scanf("%d",&a);

EnQueue(&q,a);

j=q.front;k=q.rear;

printf("\n队列中的元素为:\n"); while(j!=k)

{

printf("%d ",q.items[j]);

j++;

}

printf("\n\n是否继续入队?(y-确定 n-取消)\n");

scanf("%s",&c);

if(c=='n')

break;

printf("\n\n");

}

/***************************************************/ for(i=0;i

{

j=q.front;k=q.rear;

printf("\n队列中的元素为:\n"); if(j==k)

{

printf("队列已空, 不能完成出队操作!\n"); break;

}

while(j!=k)

{

printf("%d ",q.items[j]);

j++;

}

printf("\n\n是否出队?(y-确定 n-取消 )\n"); scanf("%s",&c);

if(c=='n')

break;

DeQueue(&q,&items);

}

printf("\n");

}

班级 信工132 学号[1**********]0姓名王甜甜 实验组别 实验日期 室温 报告日期 成绩 报告内容:(目的和要求、原理、步骤数据、计算、小结等) 实验名称: 队列的实现和应用

实验目的:1. 掌握队列的定义。

2. 掌握队列基本操作的实现。

实验环境(硬/软件要求):

Window 2000,Visual C++6.0

实验要求:

实现队列的出队和入队操作。

实验原理:队列是另一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,队列具有先进先出的特性,这与日常生活中的排队是一致的,最早进入队列的人最早离开,新来的人总是加入到队尾。

为了队列的操作方便,同时避免占用过多的内存空间,通常开辟一个连续的存储空间来存储队列中的元素,并设想这一连续的存储空间来存储队列中的元素,设想这一存储空间是一个首位相连的圆环把这种队列的存储形式形象地叫做循环队列。

实验方案:

1、定义队列类型

Typedef struct

{

ElemType q[Maxsize];

Int front,rear;

} queue

2. 入队操作

Void enq(QU,x)

Queue *QU;

ElemType x;

{

If(QU->rear+1)%Maxsize==QU->front)

Printf(“队列上溢出!\n”);

Else

{

QU->rear=(QU->rear+1)%Maxsize;

QU->q[QU->rear]=x;

}

}

3. 出队操作

Queue *QU;

ElemType *x

{

If((QU->front==QU->rear)printf(“队列下溢出!\n”); Else

{

QU->front=(QU->front+1)%Maxsize;

*x=(QU->q[QU->front]’

}

}

4.判断循环队列是否为空

Int qempty(QU)

Queue *x;

{

If(( QU->front==QU->rear)rturn(1);

Else return(0);

}

实验代码

#include

#define QUEUESIZE 100

typedef int DataType;

typedef struct

{

DataType items[QUEUESIZE];

int front,rear;

int count;

} SqQueue;

SqQueue q;

/*初始化队列*/

void InitQueue(SqQueue *Q)

{

Q->front=0;

Q->count=0;

}

/*入队*/

int EnQueue(SqQueue *Q,DataType item) {

if((Q->rear+1)%QUEUESIZE==Q->front) {

printf("队列已满,不能完成入队操作!\n"); return 0;

}

Q->items[Q->rear]=item;

Q->rear=(Q->rear+1)%QUEUESIZE; Q->count++;

return 1;

}

/*出队*/

int DeQueue(SqQueue *Q,DataType *item) {

if(Q->count

{

printf("队列已空, 不能完成出队操作!\n"); return 0;

}

*item=Q->items[Q->front];

printf("\n出队元素为: %d \n",*item); Q->front=(Q->front+1)%QUEUESIZE; Q->count--;

return 1;

}

int main()

{

int items,i,a,j,k;

int item[10];

char c;

InitQueue(&q);

for(i=0;i

{

printf("请输入入队元素\n");

scanf("%d",&a);

EnQueue(&q,a);

j=q.front;k=q.rear;

printf("\n队列中的元素为:\n"); while(j!=k)

{

printf("%d ",q.items[j]);

j++;

}

printf("\n\n是否继续入队?(y-确定 n-取消)\n");

scanf("%s",&c);

if(c=='n')

break;

printf("\n\n");

}

/***************************************************/ for(i=0;i

{

j=q.front;k=q.rear;

printf("\n队列中的元素为:\n"); if(j==k)

{

printf("队列已空, 不能完成出队操作!\n"); break;

}

while(j!=k)

{

printf("%d ",q.items[j]);

j++;

}

printf("\n\n是否出队?(y-确定 n-取消 )\n"); scanf("%s",&c);

if(c=='n')

break;

DeQueue(&q,&items);

}

printf("\n");

}


相关内容

  • 实验报告--栈和队列的应用
  • 实验5 栈和队列的应用 目的和要求: (1)熟练栈和队列的基本操作: (2)能够利用栈与队列进行简单的应用. 一.题目 题目1.利用顺序栈和队列,实现一个栈和一个队列,并利用其判断一个字符 串是否是回文.所谓回文,是指从前向后顺读和从后向前倒读都一样的字符串. 例如,a+b&b+a等等. 题 ...

  • [数据结构]教学大纲
  • <数据结构>教学大纲 Data Structure 课程编号:J6110G0003 课程性质:学科基础课程 适用专业:计算机科学与技术.网络工程.数字媒体技术 先行课:计算机科学导论.离散数学.高级语言程序设计: 后续课:无 . 学分数:5 主讲教师:任燕.王命延.冯豫华.周石林.王玮立 ...

  • 消息队列和管道的区别(转载)
  • 转载自:http://bbs.chinaunix.net/viewthread.php?tid=265266 作者:beginner-bj 请问管道和消息队列有什么不同 管道通信(PIPE) 管道通信方式的中间介质是文件,通常称这种文件为管道文件.两个进程利用管道文件进行通信时,一个 进程为写进程, ...

  • 栈与队列的应用
  • 浙江大学城市学院实验报告 课程名称 数据结构基础 实验项目名称 实验九 栈与队列的应用 学生姓名 专业班级 学号 实验成绩 指导老师(签名 ) 日期 05 05 一. 实验目的和要求 1.学会通过对问题的分析,设计一种合理的数据结构,并进行定义及操作的实 现. 2.掌握利用栈和队列的各种操作来进行具 ...

  • 一种嵌入式MPU指令译码器设计
  • 2001年2月第19卷第1期西北工业大学学报 JournalofNorthwesternPolytechnicalUniversityFeb.2001Vol.19No.1 一种嵌入式MPU指令译码器设计 刘诗斌,高德远,樊晓桠,李树国 (西北工业大学航空微电子中心,陕西西安 710072) α 摘 ...

  • 流行病学队列研究的历史回顾
  • 中华流行病学杂志,,,年月第卷第期・99"・ ・回顾与思考・ 流行病学队列研究的历史回顾 秦颖 詹思延 李立明 定有特殊暴露危险的职业群体,利用公司已有的雇佣和健康记录,以外部数据(如全国死亡率统计)为对照,研究特殊职业暴露致病的危险是否升高.对于职业危险的队列研究,充分体现了在病因黑箱未 ...

  • 二叉树遍历算法的实现
  • 二叉树遍历算法的实现 题目:编制二叉树遍历算法的实现的程序 一. 需求分析 1. 本演示程序中,二叉树的数据元素定义为非负的整型(unsigned int)数据,输入-1表示该处没有节点 2. 本演示程序输入二叉树数据均是按先序顺序依次输入 3. 演示程序以用户和计算机对话方式执行,即在计算机终端上 ...

  • 队列的应用
  • <算法与数据结构>实验报告 实验题目:队列的应用 1.实验目的: (1)掌握队列的特点及其存储方法: (2)掌握队列的常见算法和程序实现. 2.实验内容:火车车厢重排问题. 3.实验说明: 转轨站示意图如下: 火车车厢重排过程如下: 2 (a) 将369.247依次入缓冲轨 2 将8入缓 ...

  • 数据结构实验二(栈和队列)
  • 实验二 栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序存储结构和链式存储结构上的实现. 二.实验内容 本次实验提供 ...