#include <stdio.h>
#define MaxSize 10
typedef struct {
int data[MaxSize];
// front指向队头元素,rear指向队尾元素的后一个位置
int front, rear;
} SqQueue;
void InitQueue(SqQueue *q) {
q->rear=q->front=0;
}
/*
*
* 1. front指向队头元素,rear指向队尾元素的后一个位置
* * 队满条件: (q.rear+1)%MaxSize == q.front
* * 队空条件: rear == front
* * 队列元素个数: (rear-front+MaxSize)%MaxSize
* 2. 结构体中定义变量: int size = 0, 队列当前长度
* * 插入成功: size++
* * 删除成功: size--
* 3. 结构体中定义变量: int tag = 0, 最近进行的是插入(1)/删除(0)
* * 插入成功: tag = 1
* * 删除成功: tag = 0
* 4. front指向队头元素,rear指向队尾元素
* * 初始化: rear=MaxSize-1, front=0
*/
int EnQueue(SqQueue *q, int e) {
if ((q->rear+1)%MaxSize == q->front) return -1;
q->data[q->rear] = e;
q->rear = (q->rear+1)%MaxSize;
return 1;
}
int DeQueue(SqQueue *q, int *e) {
if (q->rear == q->front) return -1;
*e = q->data[q->front];
q->front = (q->front+1)%MaxSize;
return 1;
}
int GetHead(SqQueue *q, int *e) {
if (q->rear == q->front) return -1;
*e = q->data[q->front];
return 1;
}
int Length(SqQueue q) {
return (q.rear-q.front+MaxSize)%MaxSize;
}
int Empty(SqQueue q) {
if (q.rear == q.front) return 1;
else return -1;
}
int main() {
SqQueue q;
InitQueue(&q);
EnQueue(&q, 10);
EnQueue(&q, 11);
EnQueue(&q, 12);
int e = -1;
DeQueue(&q, &e);
printf("%i\n", e);
DeQueue(&q, &e);
printf("%i\n", e);
return 0;
}
顺序队列
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Java实现队列——顺序队列、链式队列 概念 先进者先出,这就是典型的“队列”。(First In, First ...
- C#数据结构:顺序队列 1、 顺序队列的假溢出现象 队列的一种顺序存储称为顺序队列。与顺序栈类似,在队列的顺序存储...
- 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入...