班级 信工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");
}