前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >栈与队列(2)

栈与队列(2)

作者头像
用户11039545
发布2024-05-24 13:59:09
780
发布2024-05-24 13:59:09
举报
文章被收录于专栏:c语言

栈 入栈顺序1 出栈顺序N

队列 如队列顺序1 出队列顺序1

队列的作用是用来保持公平性

Queue.h

代码语言:javascript
复制
typedef int QDataType;
typedef struct QueueNode
{
  struct QueueNode* next;
  QDataType val;
}QNode;
typedef struct Queue
{
  QNode* phead;
  QNode* ptail;
  int size;
}Queue;
//队尾插入
void  QueuePush(QNode* pq,int x,QDataType x);
void  QueuePop(QNode* pq,int x);
/*void  QueuePush(QNode** pphead,QNode** pptail,int x,QDataType x);
void  QueuePop(QNode** pphead,QNode** pptail,int x);
 只要我们定义了Queue这样一个结构体,我们就不用再传入二级指针*/

Queue.c

代码语言:javascript
复制
#include"Queue.h"
void QueueInit(Queue* pq)
{
  assert(pq);
  pq->phead=NULL;
  pq->ptail=NULL;
  pq->size=0;
}
//队尾插入
void QueuePush(Queue* pq,QDataType x)
{
  QNode* newnode=(QNode*)malloc(sizeof(QNode));
  if(newnode==NULL)
  {
     perror("malloc fail");
     return;
   }
  newnode->next=NULL;
  newnode->val=x;
  if(pq->ptail==NULL)
  {
    pq->phead=pq->ptail=newnode;
  }
  else
  {
    pq->ptail->next=newnode;
    pq->ptail=newnode;
   }
  pq->size++;
}
}
void QueuePop(Queue* pq)
{
   assert(pq);
   assert(pq->size);
   if(pq->phead->next==NULL)
   {
      free(pq->phead);
      pq->phead=pq->ptail=NULL;
   }
   else
   {
   QNode* next=phead->next;
   free(pq->phead);
   pq->phead=next;
   /*if(pq->phead==NULL)
   {
     pq->ptail==NULL;
   }*/
   pq->size--;
   }
} 
QDataType QueueFront(Queue* pq)
{
   assert(pq);
   assert(pq->phead);
   return pq->phead->val;
}
QDataType QueueBack(Queue* pq)
{
   assert(pq);
   assert(pq->ptail);
   return pq->ptail->val;
}
int QueueSize(Queue* pq)
{
  assert(pq);
  return pq->size;
}
bool QueueEmpty(Queue* pq)
{
  assert(pq);
  return pq->size==0;
}
void QueueDestory(Queue* pq)
{
  assert(pq);
  QNode*cur=pq->phead;
  while(cur)
  {
    //保存下一个节点
    QNode*next=cur->next;
    free(cur);
    cur=next;
  }
  pq->phead=pq->ptail=NULL;
  pq->size=0;
}

622. 设计循环队列 - 力扣(LeetCode)

空间大小是固定的

head==tail是空还是满呢 方法一:额外多开一个空间

方法二:增加一个size

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档