数据结构——队列链式存储实现
  O23b6ZpwZghv 2024年02月19日 15 0
C++

队列链式存储主要有两个方面需要注意,一个是定义时应该定义两种结构体,一个是具体节点,一个是队列本身。具体节点用于存储具体数据data和指向下一个节点的指针 * next。而队列本身的结构体只会储存两个具体节点的指针,一个指向队头,一个指向队尾。
第二个需要注意的是,出队操作,对于只剩下一个元素的队列而言,需要队队尾指针操作,使其等于头指针,以达到队空的目的,而其他情况下只需要修改头结点指向后直接释放该节点即可。
完整代码

#include<bits\stdc++.h>
using namespace std;

#define ElementType int

typedef struct LinkNode{
    ElementType data;
    struct LinkNode *next;
}LinkNode;
typedef struct{
    LinkNode *front,*rear;
}LinkQueue;

void IniQueue(LinkQueue &Q){
    Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode));
    Q.front=NULL;
}

bool IsEmpty(LinkQueue &Q){
    if(Q.front==Q.rear){
        printf("Queue is Empty!");
        return true;
    }
    return false;
}

void EnQueue(LinkQueue &Q,ElementType x){
    LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
    p->data = x;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}

bool DeQueue(LinkQueue &Q,ElementType &x){
    if(IsEmpty(Q)){
        return false;
    }else{
        LinkNode *p = Q.front->next;
        x = p->data;
        if(p==Q.rear){
            Q.rear = Q.front;
        }
        free(p);
        return true;
    }
}

本文由博客一文多发平台 OpenWrite 发布!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年02月19日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   13天前   25   0   0 C++
  BYaHC1OPAeY4   6天前   25   0   0 C++
  3dygdw7fVgD7   18天前   22   0   0 C++
  oBaV3jusLkh1   16天前   25   0   0 C++
  nmX9dIiR6BtA   16天前   25   0   0 C++
  yZdUbUDB8h5t   9天前   19   0   0 C++
O23b6ZpwZghv