C++实现有哨兵的双向循环链表:

#include<iostream>
#include<stack>
using namespace std;
template<class T>
class Node
{
private:
T data;
Node<T>* next;
public:
Node()
{
Node=NULL;
}
Node(T d)
{
data=d;
next=NULL;
}
};
template<class T>
class myqueue
{
private:  
    Node<T> *tail;  
public:  
    myqueue()  
    {  
        tail=new Node<T>();  
//tail->next=NULL;
        tail->next=tail;  //这种表示采用的是循环队列,且队列头是一个哨兵为空,它的下一个才是队列的第一个数据
    }  
  
    bool empty()  
    {  
//return (NULL==tail->next)
        return (tail->next==tail);  
    }  
  
    void push(T d)  
    {  
        Node<T> *p=new Node<T>(d); 
//p->next=NULL;
        p->next=tail->next;  
        tail->next=p;  
        tail=p;  //始终标记出尾部的位置
    }  
  
    T front()  //取队列的第一个元素
    {  
        if(empty())  
        {  
            cout<<"queue is empty!"<<endl;  
            exit(0);  
        }  
        Node<T> *p=tail->next;  //这是一个循环链表构成的队列,尾部的链接的下一个就是队列头
        T data=p->next->data;  //队列头链接的下一个才是第一个数据
        return data;  
    }  
  
    void pop()  //队列的第一个元素出队列
    {  
        Node<T> *p=tail->next;  
        Node<T> *q=p->next;  
        p->next=q->next;  
        if(q==tail)  
            tail=p;  
        delete q;  
q=NULL;
    }  
};

C++实现有哨兵的双向循环链表相关推荐

  1. 带有哨兵的双向循环链表

    有哨兵的双向循环链表: 双向链表有前驱与后继,循环链表有表尾指向表头,那么带哨兵就是从表头直接指向表尾 即: head.next       为第一个元素 head.next.prev  为最后一个元 ...

  2. 【数据结构】- 几个步骤教你认识并实现一个链表之带头(哨兵位)双向循环链表(中)

    文章目录 前言

  3. 【数据结构】- 几个步骤教你认识并实现一个链表之带头(哨兵位)双向循环链表(上)

    文章目录 前言

  4. 【数据结构】带头节点双向循环链表

    目录 顺序表和链表的区别 带头双向循环链表分析 带头双向循环链表结构: 创建一个节点 哨兵位头节点 打印链表中的值 在pos前插入 删除pos位置的节点 尾插 尾删 头插: 头删 链表元素查找 总代码 ...

  5. 数据结构-线性表之带头结点的双向循环链表

    文章目录 前言 实现 (1)结构定义 (2)基本函数 (3)操作实现 测试 代码 前言 链表的类型有很多种(根据带头或不带头,循环或非循环等等),但是我们重点研究的只有两种,一种结构非常简单是无头单向 ...

  6. 比特数据结构与算法(第二章收尾)带头双向循环链表的实现

    1.链表的分类 链表的分类 ① 单向或者双向 ② 带头或者不带头 ③ 循环或者非循环 常用的链表: 根据上面的分类我们可以细分出8种不同类型的链表,这么多链表我们一个个讲解这并没有意义.我们实际中最常 ...

  7. 【数据结构】链表:带头双向循环链表的增删查改

    本篇要分享的内容是带头双向链表,以下为本片目录 目录 一.链表的所有结构 二.带头双向链表 2.1尾部插入 2.2哨兵位的初始化 2.3头部插入 2.4 打印链表 2.5尾部删除 2.6头部删除 2. ...

  8. 数据结构-带头双向循环链表(增删查改详解)

    在上一篇博客中,详细介绍了单链表的增删查改,虽然单链表的结构简单,但是用起来却不是那么顺手.因此根据单链表的种种缺点,这篇博客所介绍的带头双向循环链表将会带来极大的优化. 上图就是带头双向循环链表的主 ...

  9. 数据结构:带头双向循环链表——增加、删除、查找、修改,详细解析

    读者可以先阅读这一篇:数据结构--单链表的增加.删除.查找.修改,详细解析_昵称就是昵称吧的博客-CSDN博客,可以更好的理解带头双向循环链表. 目录 一.带头双向循环链表的处理和介绍 1.带头双向循 ...

最新文章

  1. OpenStack云计算快速入门教程
  2. 【深入Java虚拟机JVM 04】JVM内存溢出OutOfMemoryError异常实例
  3. 简单网页制作html语言,html基本操作,看了这些你就能做简易网页
  4. .NET Core 学习资料精选:进阶
  5. C++对象内存布局--④VS编译器--单个虚拟继承
  6. Struts2自定义拦截器
  7. listctrl 使用入门
  8. (转)Uncaught TypeError: Cannot set property 'innerHTML' of null
  9. 百度AI城市又搞事情!一天三场签约 上海市民要全面迎来AI了
  10. Android事件分发机制(一)
  11. Java虚拟机优化在哪里,锁在Java虚拟机中的实现和优化
  12. Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx
  13. 全志R311芯片规格书-datasheet资料分享
  14. 向淘宝学运营:移动MM速长成
  15. 多目标优化算法之SPEA2
  16. web狗之xxm实体攻击
  17. 断点续传的原理(转)
  18. 一名武大同学的春招48小时
  19. python中表示分支结构_下面Python关键字中,不用于表示分支结构的是()。
  20. 【每日新闻】桥水达里奥:人工智能造成贫富差距 | 国产x86处理器开始生产:基于AMD Zen架构...

热门文章

  1. 访问学术网站的便捷方式
  2. 运算放大器在超高频信号作用下的偏移量的变化
  3. 简易无线电能接收方法
  4. 听说你有病,我这儿可有对症的药
  5. 电磁信号检测 | 本是同根生,相煎何太急
  6. java 桶排序_[图解] 桶排序
  7. python 微服务框架_Python微服务框架NameKo 性能体验
  8. mysql获取有哪几种状态_Mysql进阶垫脚石 -- Sql命令的执行状态有哪几种
  9. eureka同步原理_Eureka工作原理
  10. mysql存储过程表_mysql 存储过程,表