数据结构之顺序队列
来源:互联网 发布:景观设计绘图软件 编辑:程序博客网 时间:2024/05/22 06:32
队列特点 FIFO尾入头出顺序存储实现顺序队列数据类型#define MAX 6typedef int DataType;typedef struct{ DataType buf[MAX]; //front记录队头元素前一位置(下标) int front; //rear记录队尾元素位置(下标) int rear;}SeqQueue;循环队列数据类型#define MAX 6typedef int DataType;typedef struct{ DataType buf[MAX]; //front记录队头元素位置(下标) int front; //rear记录队尾元素下一位置(下标) int rear;}LoopQueue;
队列的顺序存储实现数据类型#define MAX 6typedef int DataType;typedef struct{ DataType buf[MAX]; int front; int rear;}LoopQueue;循环队列1.front 记录队头元素的下标, rear 记录队尾元素下一个位置下标2.队空条件:front == rear3.更新front rear 的方法front = (front + 1) % MAX; rear = (rear + 1) % MAX; 4.队满条件front == (rear + 1) % MAX常用操作1.创建空的循环队列,front = rear = 0LoopQueue *create_empty_loopqueue(){ }2.判空front == rearint is_empty_loopqueue(LoopQueue *q){}3.判满 front == (rear + 1) % MAXint is_full_loopqueue(LoopQueue *q){}4.入队 先插入数据,再移动rearint enter_loopqueue(LoopQueue *q,DataType data){}5.出队 先取出数据,再移动frontDataType delete_loopqueue(LoopQueue *q){}
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 6typedef int DataType;typedef struct{ //存储数据 DataType buf[MAX]; //记录队头元素下标 int front; //记录队尾元素下一位置下标 int rear;}LoopQueue;LoopQueue *create_empty_loopqueue(){ LoopQueue *q = NULL; q = (LoopQueue *)malloc(sizeof(LoopQueue)); memset(q,0,sizeof(LoopQueue)); q->front = q->rear = 0; return q;}int is_empty_loopqueue(LoopQueue *q){ return q->front == q->rear;}int is_full_loopqueue(LoopQueue *q){ return q->front == (q->rear + 1) % MAX;}int enter_loopqueue(LoopQueue *q,DataType data){ q->buf[q->rear] = data; q->rear = (q->rear + 1) % MAX; return 0;}DataType delete_loopqueue(LoopQueue *q){ DataType data; data = q->buf[q->front]; q->front = (q->front + 1) % MAX; return data;}int main(){ LoopQueue *q = NULL; int i = 0; q = create_empty_loopqueue(); while(!is_full_loopqueue(q)) { enter_loopqueue(q,i++); } while(!is_empty_loopqueue(q)) { printf("%d ",delete_loopqueue(q)); } putchar('\n'); puts("===================================="); while(!is_full_loopqueue(q)) { enter_loopqueue(q,i++); } while(!is_empty_loopqueue(q)) { printf("%d ",delete_loopqueue(q)); } putchar('\n'); return 0;}