数据结构—队列

定义

队列(queue)是只允许在一端进行插入操作,在另一端进行删除操作的线性表,队列的特点是先进先出(First In First Out)

允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。

向队列中插入新的数据元素称为入队。从队列中删除队头元素称为出队。

队列的顺序存储结构

顺序队列

用一组地址连续的存储单元,依次存放从队头到队尾的数据元素,称为顺序队列。实现顺序队列需要设两个指针:队头指针(front)和队尾指针(rear),分别指向队头元素和队尾元素。

循环队列

循环队列
typedef int DATATYPE;
typedef struct queue {
DATATYPE *ptr;
int tlen;
int head;
int tail;
}SeqQueue;
int DestroySeqQueue(SeqQueue *queue);
DATATYPE QuitSeqQueue(SeqQueue *queue);int EnterSeqQueue(SeqQueue *queue, DATATYPE data);
int IsEmptySeqQueue(SeqQueue *queue);
int IsFullSeqQueue(SeqQueue *queue);
SeqQueue *CreateSeqQueue(int len);

判断队空还是队满?

队满的条件(Queue.tail+1)%MAXSIZE==Queue.head

队空的条件Queue.head=Queue.tail

两种解决方案

  1. 设置一个计数器,开始的时候为0,当有元素入队时+1,有元素出队时-1,值为MAXSIZE时队满
  2. 保留一个元素空间,当队尾指针指的空单元的下一个单元是队头指针所指单元是为对满

链式队列

typedef struct person
{
char name[32];
char sex;
int age;
int score;
} DATATYPE;
typedef struct quenode
{
DATATYPE data;
struct quenode *next;
} LinkQueNode;
typedef struct
{
LinkQueNode *head;
LinkQueNode *tail;
int clen;
} LinkQue;
LinkQue * CreateLinkQue();
int EnterLinkQue(LinkQue *lq,DATATYPE* newnode);
int QuitLinkQue(LinkQue*lq);
DATATYPE* GetHeadLinkQue(LinkQue *lq);
int GetSizeLinkQue(LinkQue *lq);
int IsEmptyLinkQue(LinkQue *lq);
int DestroyLinkQue(LinkQue * lq);

相关推荐
量子炒饭大师3 小时前
Cyber骇客的脑机双链回流码 ——【初阶数据结构与算法】线性表之双向链表
数据结构·c++·链表
2401_841495643 小时前
【LeetCode刷题】缺失的第一个正数
数据结构·python·算法·leetcode·数组·哈希·缺失最小正整数
C++业余爱好者3 小时前
Java 中的数据结构详解及应用场景
java·数据结构·python
拼好饭和她皆失3 小时前
二分答案算法详解:从理论到实践解决最优化问题
数据结构·算法·二分·二分答案
月明长歌3 小时前
【码道初阶】Leetcode234进阶版回文链表:牛客一道链表Hard,链表的回文结构——如何用 O(1) 空间“折叠”链表?
数据结构·链表
CoderYanger3 小时前
C.滑动窗口-求子数组个数-越长越合法——2962. 统计最大元素出现至少 K 次的子数组
java·数据结构·算法·leetcode·职场和发展
小满、3 小时前
Redis:高级数据结构与进阶特性(Bitmaps、HyperLogLog、GEO、Pub/Sub、Stream、Lua、Module)
java·数据结构·数据库·redis·redis 高级特性
月明长歌3 小时前
【码道初阶】Leetcode面试题02.04:分割链表[中等难度]
java·数据结构·算法·leetcode·链表
如竟没有火炬3 小时前
快乐数——哈希表
数据结构·python·算法·leetcode·散列表