数据结构之顺序队列

来源:互联网 发布:景观设计绘图软件 编辑:程序博客网 时间: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;}