数据结构之顺序队列

队列特点 FIFO
尾入头出

顺序存储实现

顺序队列

数据类型

#define MAX 6
typedef int DataType;
typedef struct
{
    DataType buf[MAX];
    //front记录队头元素前一位置(下标)
    int front;
    //rear记录队尾元素位置(下标)
    int rear;
}SeqQueue;


循环队列

数据类型

#define MAX 6
typedef int DataType;
typedef struct
{
    DataType buf[MAX];
    //front记录队头元素位置(下标)
    int front;
    //rear记录队尾元素下一位置(下标)
    int rear;
}LoopQueue;
队列的顺序存储实现


数据类型


#define MAX 6


typedef int DataType;
typedef struct
{
    DataType buf[MAX];
    int front;
    int rear;
}LoopQueue;




循环队列
1.front 记录队头元素的下标,
  rear  记录队尾元素下一个位置下标
2.队空条件:front == rear


3.更新front rear 的方法


front = (front + 1) % MAX; 
rear = (rear + 1) % MAX; 


4.队满条件


front == (rear + 1) % MAX




常用操作
1.创建空的循环队列,front = rear = 0
LoopQueue *create_empty_loopqueue()
{
    
}


2.判空front == rear
int is_empty_loopqueue(LoopQueue *q)
{


}


3.判满 front == (rear + 1) % MAX
int is_full_loopqueue(LoopQueue *q)
{}


4.入队 先插入数据,再移动rear
int enter_loopqueue(LoopQueue *q,DataType data)
{


}


5.出队 先取出数据,再移动front
DataType delete_loopqueue(LoopQueue *q)
{


}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define MAX 6


typedef 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值