1.实验所涉及的知识点
(1)C语言的指针知识。
(2)顺序表的操作。
(3)队列的先进先出原理。
(4) 空队列、入队列、出队列、返回队列长度等操作。
(5) 应用:循环队列。
2.程序源码
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#define error 0
#define ok 1
#define size 5 //队列长度
typedef int Elemtype;
typedef int Status;
typedef struct{
Elemtype *base;
int front;
int nrear;
}Queue;
Status Que_init(Queue &L)//创建空的队列
{
L.base=(Elemtype *)malloc(size*sizeof(Elemtype));
if(!L.base)
return error;
L.front=L.nrear=0;
return ok;
}
Status Que_size(Queue &L)//返回队列的长度
{
return (L.nrear-L.front+size)%size;
}
Status Que_insert(Queue &L,Elemtype e)//进入循环队列
{
if((L.nrear+1)%size==L.front)//注意内存空间首个地址为空值,所以实际可存入的元素少1
return error;
L.base[L.nrear]=e;
L.nrear=(L.nrear+1)%size;
return ok;
}
Status Que_delete(Queue &L,Elemtype &e)//出循环队列
{
if(L.nrear==L.front)
return error;
e=L.base[L.front];
L.front=(L.front+1)%size;
return ok;
}
int main()
{
Queue L;
int m,n;
Que_init(L);
printf("请输入进入循环队列元素:/n");
for(int i=0;i<size-1;i++)
{
scanf("%d",&m);
Que_insert(L,m);
}
n=Que_size(L);
printf("循环队列长度:%d/n",n);
printf("出循环队列的元素:/n");
for(int i=0;i<size-1;i++)
{
Que_delete(L,n);
printf("%d/n",n);
}
printf("/n");
system("pause");
return 0;
}