【数据结构复习自用】链式队列的基本操作

队列常见的基本操作

InitQueue(&Q)  //初始化队列,构造一个空队列Q
QueueEmpty(Q)  //判队列空,若空返回true,不空返回false
EnQueue(&Q,x)  //入队,若Q未满,将x加入,使之成为新的队尾
DeQueue(&Q,&x)  //出队,若Q非空,删除队头元素,并用x返回
GetHead(Q,&x)  //读队头元素,若Q非空,将队头元素赋值给x
//栈和队列是受限制的线性表,所以不是任何对线性表的操作都适用于栈和队列,
//比如,不可以随便读取栈和队列中间的某个元素

队列的链式存储类型和描述为

typedef struct LinkNode{   //链式队列结点
    ElemType data;
    struct LinkNode *next;
}LinkNode;

typedef struct{         // 链式队列
    LinkNode *front,*rear;
}LinkQueue;
  1. 初始化
void InitQueue(LinkQueue &Q) {
    Q.front == Q.rear = (LinkNode*) malloc (sizeof(linkNode));  // 建立头结点
    Q.front-> next = NULL;  //初始为空
}
  1. 判队空
bool IsEmpty (LinkQueue Q){
    if(Q.front == Q.rear)  return true;  //和顺序队列判空相同
    else return false;
}
  1. 入队
//不用判断队满(链式是动态分配空间)需要malloc新结点
void EnQueue(LinkNode &Q, ElemType x){
    LinkNode *s = (linkNode *)malloc(sizeof(LinkNode));
    s->data = x; s->next = NULL;  //初始化新结点
    Q.rear->next = s;
    Q.rear = s;     //插到链尾,然后变成尾
}
  1. 出队
bool DeQueue(LinkNode &Q, ElemType &x){
    if(Q.rear == Q.front)  return false;   //队空
    LinkNode &p = Q.front->next;
    x = p->data;   //x取a1的data
    Q.front -> next = p->next;   //逻辑上:Q->next = Q->next->next  跳过a1(也就是删除a1,也就是a1出队)

    //如果Q只有一个元素,删除之后队空
    if(Q.rear==p)
      Q.rear = Q.front;
    free(p);
    return true;
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值