队列

队列,先来先服务,先进先出

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

操作集

  • Queue CreatQueue(int MaxSize):生成长度为MaxSize的队列
  • int IsFullQ(Queue Q,int MaxSize):判断队列Q是否已满
  • void AddQ(Queue Q,ElemenType item):将数据元素item插入队列
  • int IsEmptyQ(Queue Q):判断队列是否为空
  • ElementType DeleteQ(Queue Q):将队投元素从队列中删除并返回

队列顺序存储实现

队列的顺序存储结构通常由一个一维数组和一个记录队列头元素位置的变量front以及一个记录队列尾元素的变量rear组成

#define MaxSize <最大元素个数>
struct QNode{
      ElementType Data[MaxSize];
      int rear;
      int front;
};
typedef struct QNode *Queue;

环状队列

队空队满依据front和rear的值判别 front=rear时队队满或队空

//入队列
void AddQ(Queue PtrQ,ElementType item){
      if(PtrQ->rear+1) % MaxSize == PtrQ->front{
            printf("队列满");
            return ;
      }
      PtrQ->rear=(PtrQ->rear+1) % MaxSize;
      PtrQ->Data[PtrQ->rear]=item;
//出队列
ElementType DeleteQ(Queue ptrQ){
      if(PtrQ->front==PtrQ->reat){
            printf("队列空");
            return ERROR;
      }
      else{
            PtrQ->front=(PtrQ->front+1)%MaxSize;
            return PtrQ->Data[PtrQ->front];
      }
}

队列的链式存储实现

队列的链式存储结构也可以用一个单链表实现,插入和删除操作分别在链表的两头进行fornt指向链表头

struct Node{
      ElementType Data;
      struct Node *Next;
};
struct QNode{             //链队列结构
      struct Node *rear;  //指向队尾结点
      struct Node *Front; //指向队头结点
};
typedef struct QNode *Queue;
Queue PtrQ;
//不带头结点的链式队列出队操作示例
ElementType DeleteQ(Queue PtrQ){
      struct Node *FrontCell;
      ElementType FrontElem;
      if(PtrQ->front == NULL){
            printf("队列空");
            return ERROR;
      }
      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 @   小哑师兄  阅读(125)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示