队列顺序存储用链表来表示,用front指针表示队首,用rear指针表示队尾,实现队列的几个基本的操作。
#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype a[MAXSIZE];
int front;
int rear;
}sequence_queue;
void init(sequence_queue *sq)
{
sq->front=0;
sq->rear=0;
}
bool empty(sequence_queue *sq)
{
if(sq->front==0&&sq->rear==0)
return true;
return false;
}
bool full(sequence_queue *sq)
{
//判断队列是否为满
if(sq->rear==MAXSIZE)
return true;
return false;//满返回true,空返回false
}
void display(sequence_queue *sq)
{
int i;
if(sq->front==0&&sq->rear==0)
printf("\n队列是空的");
else
for(i=sq->front;i<sq->rear;i++)
printf("%3d",sq->a[i]);
}
datatype dequeue(sequence_queue *sq)
{
//出队
if(sq->front==sq->rear)
{
printf("队列为空,无法出队");
return 0;
}
datatype x;
x=sq->a[sq->front];
sq->front++;
return x;
}
void insertqueue(sequence_queue *sq,datatype x)
{
if(sq->rear==MAXSIZE)
{
printf("队列已满,无法插入");exit(1);
}
sq->a[sq->rear]=x;
sq->rear++;
}
void clearqueue(sequence_queue *sq)
{
sq->front=sq->rear=0;
}
int main()
{
datatype x;
sequence_queue* sq = (sequence_queue*)malloc(sizeof(sequence_queue));
init(sq);
int n;
printf("请输入需要创建队列的个数:");
scanf("%d", &n);
for(int i = 1; i <= n; ++ i)
{
printf("请输入需要插入的值:");
scanf("%d", &x);
insertqueue(sq, x);
}
bool flag;
do
{
printf("是否进行出队操作(1: 是, 0: 否):");
scanf("%d", &flag);
if(flag)
{
x = dequeue(sq);
printf("出队的元素为: %d\n", x);
//display(sq);
}
display(sq);
}while(flag);
do
{
printf("是否进行插入操作(1: 是, 0: 否):");
scanf("%d", &flag);
if(flag)
{
printf("请输入需要插入的值:");
scanf("%d", &x);
insertqueue(sq, x);
}
display(sq);
}while(flag);
clearqueue(sq);
return 0;
}