线性表之队列

什么是队列

大众化

  • 最常见的队列就是排队
  • 假设超市送鸡蛋
  • 大伙去排队领鸡蛋
  • 先来的先领,后来的后领
  • 这就是队列
  • 先来先服务,先进先出

专业性

  • 只能在一端插入,而在另一端删除
  • 具有一定操作约束的线性表

队列的操作集

  • 生成长度为MaxSize的空队列
  • 判断队列Q是否已满
  • 将数据元素item插入队列Q中
  • 判断队列Q是否为空
  • 删除并返回队头数据元素

队列的链式存储实现

链表结构体初始化

struct Node{
ElementType Data;
struct SNode *Next;
};
struct QNode {	//链队列结构
struct Node* rear;	//指向队尾结点
struct Node* front;	//指向对头结点
//这样就不用每次用的时候都遍历一回了,nice~
};
typedef struct QNode *Queue;
Queue PtrQ;

删除并返回队头数据元素

ElementType DeleteQ(Queue PtrQ)
{
struct Node* FrontCell;
ElementType FrontElem;
//判断队列是否为空
if (PtrQ->front == NULL)
{
	printf("队列空");
	return NULL;
}
FrontCell = PtrQ->front;
//如果队列只有一个元素
if (PtrQ->front == PtrQ->rear)
{
	//删除后队列置为空
	PtrQ->front = PtrQ->rear = NULL;
}
else
{
	//使得次结点变为头结点
	PtrQ->front = PtrQ->front->Next;
}
FrontElem = FrontCell->Data;
free(FrontCell);
//返回头结点元素
return FrontElem;
}

其他操作

大部分操作都跟堆栈是相似的,就是思路不一样而已

posted @ 2023-01-25 21:11  淦丘比  阅读(22)  评论(0编辑  收藏  举报