运行环境:
Dev c++
算法思想:
队列顺序存储用链表来表示,用front指针表示队首,用rear指针表示队尾,实现队列的几个基本的操作。
核心数据结构:
typedef int datatype;
typedef struct
{
datatype a[MAXSIZE];
int front;
int rear;
}sequence_queue;
程序主体框架:
//函数名:init 参数:sequence_queue * sq
void init(sequence_queue * sq)
{
//功能: 队列初始化
}
//函数名:empty 参数:sequence_queue * sq
bool empty(sequence_queue * sq)
{
//功能: 判断队列是否为空
}
//函数名:full 参数:sequence_queue * sq
bool full(sequence_queue * sq)
{
//功能: 判断队列是否为满
}
//函数名:display 参数:sequence_queue * sq
void display(sequence_queue * sq)
{
//功能: 打印队列
}
//函数名:dequeue 参数:sequence_queue * sq
datatype dequeue(sequence_queue * sq)
{
//功能: 出队
}
//函数名:insertqueue 参数:sequence_queue * sq, datatype x
void insertqueue(sequence_queue * sq, datatype x)
{
//功能: 入队
}
//函数名:clearqueue 参数:sequence_queue * sq
void clearqueue(sequence_queue * sq)
{
//功能: 清空队列
}
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);
}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;
}
测试用例:
5
2
5
2
9
3
1
2
0
1
5
0
代码实现:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype a[MAXSIZE];
int front;
int rear;
}sequence_queue;
//函数名:init 参数:sequence_queue * sq
void init(sequence_queue * sq)
{
//功能: 队列初始化
sq->front=0;
sq->rear=0;
}
//函数名:empty 参数:sequence_queue * sq
bool empty(sequence_queue * sq)
{
//功能: 判断队列是否为空
if(sq->front==sq->rear)
return true;
else
return false;
}
//函数名:full 参数:sequence_queue * sq
bool full(sequence_queue * sq)
{
//功能: 判断队列是否为满
if(sq->rear-sq->front==MAXSIZE)
return true;
else
return false;
}
//函数名:display 参数:sequence_queue * sq
void display(sequence_queue * sq)
{
//功能: 打印队列
for(int i=sq->front;i<sq->rear;i++)
{
printf("%d ",sq->a[i]);
}
}
//函数名:dequeue 参数:sequence_queue * sq
datatype dequeue(sequence_queue * sq)
{
//功能: 出队
int x;
if(!empty(sq))
{
x=sq->a[sq->front];
sq->front++;
return x;
}
exit(0);
}
//函数名:insertqueue 参数:sequence_queue * sq, datatype x
void insertqueue(sequence_queue * sq, datatype x)
{
//功能: 入队
if(!full(sq))
{
sq->a[sq->rear]=x;
sq->rear++;
}
}
//函数名:clearqueue 参数:sequence_queue * sq
void clearqueue(sequence_queue * sq)
{
//功能: 清空队列
sq->front=0;
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);//功能: 打印队列
}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;
}