#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)进行插入...