队列
- 队列特性: 先进先出限定 插入 操作只能在 队尾 进行,而 删除操作只能在队头进行。
- 循环队列:一种线性数据结构,其操作表现基于 先进先出 ,队尾被连接在队首之后以形成一个循环。
- 循环队列的操作与普通队列类似,但又有独特的优点
- 下面给出一些循环队列的操作函数:队列创建、入队、队列出队等
#include <stdio.h>
#include <stdlib.h>
typedef char DataType;
struct Queue//结构体定义
{
int Max;
int f; //首指针
int r; 尾指针
DataType *elem; //数据指针
};
typedef struct Queue *SeqQueue;
SeqQueue SetNullQueue_seq(int m) //创建空队列
{
SeqQueue squeue;
squeue = (SeqQueue)malloc(sizeof(struct Queue));
if (squeue == NULL)
{
printf("Alloc failure\n");
return NULL;
}
squeue->elem = (char*)malloc(sizeof(DataType)*m);
if (squeue->elem != NULL)
{
squeue->Max = m;
squeue->f = 0;
squeue->r = 0;
return squeue;
}
}
int IsNullQueue_seq(SeqQueue squeue) //队列判空
{
return (squeue->f == squeue->r);
}
void EnQueue_seq(SeqQueue squeue, DataType x) //队列的入队操作
{
@@
}
void DeQueue_seq(SeqQueue squeue) //队列的出队操作
{
@@
}
DataType FrontQueue_seq(SeqQueue squeue) //取队头节点函数
{
@@
}
int main()
{
char ch;
SeqQueue queueA = SetNullQueue_seq(5);
ch = getchar();
while (ch != '#')
{
EnQueue_seq(queueA, ch);
ch = getchar();
}
DeQueue_seq(queueA);
printf("%c" ,FrontQueue_seq(queueA));
return 0;
}
下面给出入队和出队以及取队头的函数实现
- 入队函数:
squeue 是操作的队列,x是入队的元素
- `void EnQueue_seq(SeqQueue squeue, DataType x)
{
if ((squeue->r + 1) % squeue->Max != squeue->f) //队列未满
{
squeue->elem[squeue->r] = x;
squeue->r = (squeue->r + 1) % squeue->Max;//循环数组使用,移动尾指针
}
else
{
printf("It is FULL Queue!");//队列满了
return 0;
}
}
出队函数
void DeQueue_seq(SeqQueue squeue)
{
if(!IsNullQueue_seq(squeue))//判断队列是否为空
squeue->f=(squeue->f+1)%squeue->Max;//移动首指针
else
{
printf("It is empty queue!");
}
}
取队头函数
DataType FrontQueue_seq(SeqQueue squeue)
{
if (!IsNullQueue_seq(squeue))
{ // 判断队列是否为空
return squeue->elem[squeue->f];
}
else
{
printf("It is empty queue!");
return '\0'; // 返回空字符
}
}
输入样例: ABCD#
输出样例: B
`
输入样例: ABCDEF#
输出样例: It is FULL Queue!It is FULL Queue!B
谢谢支持点赞₍˄·͈༝·͈˄*₎◞ ̑̑