循环队列
把数组看作首尾相连 —— 形成循环队列
front 指向队头;rear 指向队尾的下一个位置
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define ElemType int
#pragma warning( disable : 4996)
typedef struct
{
ElemType *data; // 指向data的指针
int front, rear, len,size;
int seek;//用于搜索队列元素
} SeqQueue, *pSeqQueue;
void SeqQueueCreate(pSeqQueue que, ElemType n)//初始化栈
{
que->data = (ElemType *)malloc(n+1);//动态分配
if (que->data == NULL){ printf("分配内存失败"); }
que->front = que->rear = 0;//栈空
que->len = 0;
que->size = n+1;
que->seek = 0;
}
void SeqQueueIn(pSeqQueue que, ElemType x)//插入元素
{
if (que->len <que->size - 1)
{
que->data[que->rear] = x;
printf("队列总共可存储元素个数:%d\n当前队列元素个数:%d\n已经存储元素: %d\n", que->size, que->len, que->data[que->rear]);
que->rear = (que->rear ++) % que->size;
que->len++;
}
else
{
printf("栈满\n");
}
}
void SeqQueueOut(pSeqQueue que)//删除元素
{
while (que->front < que->rear)
{
printf("出队元素为:%d\n",que->data[que->front]);
que->front = (que->front++) % que->size;
}
}
void SeekQueueOut(pSeqQueue que, ElemType m)//搜索元素
{
while (que->seek < que->rear)
{
if(que->data[que->seek]==m)
{
printf("成功找到元素为:%d\n", que->data[que->seek]);
break;
}
else
{
que->seek++;
}
}
}
SeqQueue ss;
int m,n;
int main()
{
printf("请输入入队元素个数:\n");
scanf("%d", &n);
SeqQueueCreate(&ss, n);
for (int i = 1; i <n+2; i++)
{
printf("请输入第 %d 个元素:\n",i);
scanf("%d",&m);
SeqQueueIn(&ss,m);
}
SeekQueueOut(&ss, 2);
SeqQueueOut(&ss);
system("pause");
return 0;
}