#include <stdio.h>
#include <stdlib.h>
//#include <stdbool.h>
//顺序队列
#define SIZE 3
#define true 1
#define false 0
typedef int datatype;
typedef struct seqqueue
{
datatype data[SIZE]; // 数据域
datatype front; // 队头前一个位置下标
datatype rear; // 队尾位置下标
}seq_queue, * seq_pqueue; //
//指针的指针一般存放这个存放地址
//不能申请使用结构体指指针,因为只有四个字节,而不是结构体内存
// 初始化
datatype init_seqqueue(seq_pqueue* queue)
{
(*queue) = (seq_pqueue)malloc(sizeof(seq_queue));
if (NULL == (*queue))
{
printf("malloc err\n");
return -1;
}
(*queue)->front = 0;//一般0或者-1以及SIZE-1或者SIZE 比较多人取
(*queue)->rear = 0;
return 0;
}
//挨近就满了,%为了循环
// 判断队列是否已满
datatype isfull_seqqueue(seq_pqueue queue)
{
if (queue->front == (queue->rear + 1) % SIZE)
{
return true;
}
else
{
return false;
}
}
// 入队
void in_seqqueue(seq_pqueue queue, datatype dat)
{
if (isfull_seqqueue(queue))
{
printf("队列已满\n");
return;
}
queue->rear = (queue->rear + 1) % SIZE;
queue->data[queue->rear] = dat;
}
//判断队列是否已空
datatype isempty_seqqueue(seq_pqueue queue)
{
if (queue->front == queue->rear)
{
return true;
}
else
{
return false;
}
}
// 出队
void out_seqqueue(seq_pqueue queue, datatype* dat)
{
if (isempty_seqqueue(queue))
{
printf("队列已空\n");
return;
}
queue->front = (queue->front + 1) % SIZE;
*dat = queue->data[queue->front];
}
// 打印
void show_seqqueue(seq_pqueue queue)
{
int i = 0;
if (isempty_seqqueue(queue))
{
printf("队列已空\n");
return;
}
//for (i = (queue->front) % SIZE; i < (queue->rear) % SIZE; i = (i + 1) % SIZE)
//{
// printf("%d\t", queue->data[i]);
//}
for (i = (queue->front + 1) % SIZE; i != (queue->rear + 1) % SIZE; i = (i + 1) % SIZE)
{
printf("%d\t", queue->data[i]);
}
printf("\n");
}
int main(void)
{
seq_pqueue queue = NULL;
datatype in_data = 0;
datatype out_data = 0;
datatype ret = 0;
init_seqqueue(&queue); // 初始化队列
in_data = 4;
in_seqqueue(queue, in_data);
printf("入队后队列元素:");
show_seqqueue(queue);
out_seqqueue(queue, &out_data);
printf("出队后队列元素:");
show_seqqueue(queue);
while (1)
{
printf("输入整数:");
ret = scanf_s("%d", &in_data);
if (ret != 0)
{
in_seqqueue(queue, in_data);
printf("入队后队列元素:");
show_seqqueue(queue);
}
}
return 0;
}