栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构】队列 链式实现 包含入队出队遍历等操作(代码+注释)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构】队列 链式实现 包含入队出队遍历等操作(代码+注释)

 基本构成
typedef struct {
    int n;
    char ch;
}ElemType;//数据类型 可以自行添加、改变
typedef struct QNode {
    ElemType data;
    struct QNode *next;
}QNode,*QueuePtr;//结点
typedef struct linkQueue {
    QNode* pfront;//头指针
    QNode* prear;//尾指针
}linkQueue;
初始化
void InitQueue(linkQueue &Q)
{
    Q.pfront=Q.prear=(QNode*)malloc(sizeof(QNode));
    if(!Q.pfront)
    {
        cout<<"初始化分配内存失败!n";
        return;
    }
    Q.pfront->next=NULL;
}
入队
void QPush(linkQueue &Q,ElemType e)
{
    //创建新结点并赋值
    QNode* p=(QNode*)malloc(sizeof(QNode));
    if(!p)
    {
        cout<<"入队分配内存失败!n";
        return;
    }
    p->data=e;
    p->next=NULL;
    //入队---队尾入队
    Q.prear->next=p;
    Q.prear=p;//尾指针移到最后
}
出队
void QPop(linkQueue &Q,ElemType &e)
{
    //判断队列是否为空 为空则不进行出队
    if(Q.pfront==Q.prear) return;
    //找到出队结点 即队首第一个结点
    QNode* p=Q.pfront->next;
    e=p->data;
    //出队---队首元素出队
    Q.pfront->next=p->next;
    //Q.prear==p此时为队列仅有一个元素,出队后队列为空
    //将Q.prear置为Q.prear=Q.pfront 否则Q.prear指向p,free后变为野指针
    if(Q.prear==p) Q.prear=Q.pfront;
    free(p);
}
遍历
void QueueTraverse(linkQueue Q)
{
    cout<<"队列:";
    QNode *p=Q.pfront->next;
    while(p)
    {
        cout<data<<" ";
        p=p->next;
    }
    cout< 
判断队列是否为空 
bool QEmpty(linkQueue Q)
{
    if(Q.pfront==Q.prear) return true;
    else return false;
}
获取队首元素
ElemType Top(linkQueue Q)
{
    return Q.pfront->next->data;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296978.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号