队列-顺序储存

什么是队列?

队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一方叫做队头。

顺序储存的做法

队列和栈一样,有自己的规则,使用队列存储数据时,只允许从一端进行插入,另一端进行删除。需要遵循“先进先出”的规则。 按照以往的做法,头指针都在下标0的位置,那也就意味着,队列的所有元素都要向前挪动,以保证队列的队头,可是有时想想,为什么出队列一定要全部 移动呢?如果不去限制元素必须存储在数组的前n个单位这一条件,性能会大大提升,也就是说队头不一定要在下标0的位置。当rear==front 的时候 队列是空的,(rear+1)%max == front 的时候队列就是满的。

进队列
#include <stdio.h>
#include <stdlib.h>

int enQueue(int *a,int front,int rear,int data,int max)//max 队列的大小
{
    if ((rear+1)%max==front) { 
        printf("空间已满");
        return rear;
    }
    a[rear%max] = data;//将rear指针向后移动一位
    rear++;
    return rear;
}
复制代码
出队列
int deQueue(int *a,int front,int rear,int max)
{
    if (front == rear) {
        printf("队列已空");
        return front;
    }
    
    printf("%d", a[front]);
    front = (front + 1)% max;//将front指针向后移一位
    return front;
}
复制代码
应用
int main()
{
    int max = 5;
    int a[max];
    int front,rear;
    
    front = rear = 0;
    
    rear = enQueue(a, front, rear, 1, max);
    rear = enQueue(a, front, rear, 2, max);
    rear = enQueue(a, front, rear, 3, max);
    rear = enQueue(a, front, rear, 4, max);
    front = deQueue(a, front, rear, max);
    
    rear = enQueue(a, front, rear, 5, max);
    front = deQueue(a, front, rear, max);
    
    rear = enQueue(a, front, rear, 6, max);
    front = deQueue(a, front, rear, max);
    front = deQueue(a, front, rear, max);
    front = deQueue(a, front, rear, max);
    front = deQueue(a, front, rear, max);
    
    printf("\n");
    return 0;
}


复制代码
运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值