快速搞懂数据结构之顺序队列

队列

队列是限制在两端进行插入操作和删除操作的线性表
允许进行存入操作的一端称为“队尾
允许进行删除操作的一端称为“队头
当线性表中没有元素时,称为“空队”
特点 :先进先出(FIFO)
在这里插入图片描述

队列常用操作函数

  • 创建队列 :queue_create();
  • 清空队列 :queue_clear(sequeue *sq);
  • 判断队列空 :queue_empty(sequeue *sq);
  • 判断队列满 :queue_full(sequeue *sq);
  • 入队 :enqueue(sequeue *sq, datatype x);
  • 出队 :dequeue(sequeue *sq);
  • 释放队列内存:queue_free(sequeue *sq);

队列实现结构体

typedef  int  data_t ;    /*定义队列中数据元素的数据类型*/
#define  N  64	    /*定义队列的容量*/
typedef  struct {
   
      data_t  data[N] ;   /*用数组作为队列的储存空间*/
      int  front, rear ;     /*指示队头位置和队尾位置的指针*/
} sequeue ; 	     /*顺序队列类型定义*/

队列演示

规定:

  • front指向队头元素的位置;
  • rear指向队尾元素的下一个位置。
  • 在队列操作过程中,为了提高效率,以调整指针代替队列元素的移动,并将数组作为循环队列的操作空间。
  • 为区别空队和满队,满队元素个数比数组元素个数少一个。
    队列演示gif

顺序队列为什么要采用循环的方式?

为了避免顺序队列产生假溢出。
假溢出:
顺序队列因多次入队知列和出队列操作后出现的有存储空间但不能道进行入队列操作的溢出称为假溢出;
真溢出:
在顺序队列中,由于数组空间不够而产生的溢出叫真溢出;

循环队列如何判断空和满?

  • 队头指针在队尾指针的下一位置时,队满。
  • 当队头和队尾指针在同一位置时,队空。

``

sequeue.h

typedef int datatype;
#define N 128

typedef struct {
   
	datatype data[N];
	int front;
	int rear;
}sequeue;

sequeue * queue_create();
int enqueue(sequeue *sq, datatype x);
datatype dequeue(sequeue *sq);
int queue_empty(
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值