链表类模板list

2023-11-16

描述

设计如下样式的链表类模板list,并对其进行简单使用。

template <class T> class list{ 

//类模板 list,使用类型形参 T

    struct node { 

    //结构体 node 类型用来定义链表表项(的具体数据项)

    T data; 

    //每一表项的 data 数据域的类型由类型形参 T 所指定

    node * next; 

    //通过指针 next,将多个表项“链接”成一个链表

} *head, *tail; 

//数据成员 head 与 tail,为链表的首尾指针

public:

    list (); //构造函数,创建“空链表”

    void Insert (T item);

    //生成链表项插入到原链的链首

    void Append (T item); 

    //生成链表项附加到原链的链尾

    int count(); 

    //返回当前链表的项数

    void htot(); 

    //把链表首项移到链尾

    void ttoh(); 

    //把链表尾项移到链首

    void display();

     //将各链表项数据 data 显示在屏幕上

};

八个成员函数的具体功能描述如下:

1. list ();

构造函数,将 head 与 tail 均置为 NULL,意味着创建出一个“空链表”。

2. void Insert (T item);

动态生成一块链表项空间,并将 T 类型的数据 item 放入该链表项的 data 域,而后将新生成的该链表项插入到原链的链首(链表的“栈”式用法)。

3. void Append (T item);

动态生成一块链表项空间,并将 T 类型的数据 item 放入该链表项的 data 域,而后将新生成的该链表项附加到原链的链尾(链表的“队列”式用法)。

4. int count();

“数出”并返回当前链表的数据项数:空链时返回 0;链表非空时,意味着要“遍历”链表,即从头到尾“数”出链表的项数后返回。

5. void htot();

把链表首项移到链尾:空链或仅一项时无须移动;否则,要将原链首项“接到”其尾项之后,而后马上调整新链首指针 head 以及新链尾指针 tail。

6. void ttoh();

把链表尾项移到链首:空链或仅一项时无须移动;否则,要将原链尾项“挪到”链首,而后马上调整新链首指针 head 以及新链尾指针 tail。

7. void display();

将各链表项数据 data 显示在屏幕上:空链时输出"emptylist";否则要对链表进行“遍历”,从头到尾逐项对其 data 数据进行显示(输出元素之间用一个空格隔开)。

要求:在主函数中,需要创建两个链表link1和link2,将输入的所有链表元素依次通过Append加到link1中,并依次通过Insert加到link2中。

输入

输入一共有三行,第一行为链表类型 (只需考虑int/char,均为小写即可);

第二行为链表长度;

第三行依次输入链表元素。

输出

输出有六行,第一行为link1.count()的结果;

第二行为link1.display()的结果;

第三行为link1经过ttoh()后,link1.display()的结果;

第四行为link2.count()的结果;

第五行为link2.display()的结果;

第六行为link2经过htot()后,link2.display()的结果。

样例输入

int

5

1 2 3 4 5

样例输出

5

1 2 3 4 5

5 1 2 3 4

5

5 4 3 2 1

4 3 2 1 5

#include<iostream>
#include<string>
using namespace std;
template <class T> class list { 
    struct node { 
        T data; 
        node * next; 
    } *head, *tail;
public:
    list();
    void Insert(T item); 
    void Append(T item); 
    int count();
    void htot(); 
    void ttoh();
    void display(); 
};

template <class T> list<T>::list() {
    head = NULL;
    tail = NULL;
}

template <class T> void list<T>::Append(T item) {
    node *p;
    p = new node;
    p->data = item;
    p->next = NULL;
    if (tail) {
        tail->next = p;
    }
    tail = p;
    if (head == NULL) {
        head = tail;
    }
}

template <class T> void list<T>::Insert(T item) {
    node *p;
    p = new node;
    p->data = item;
    p->next = NULL;
    if (head) {
        p->next = head;
    }
    head = p;
    if (tail == NULL) {
        tail = head;
    }
}

template <class T> int list<T>::count() {
    node *p = head;
    int num = 0;
    while (p) {
        num++;
        p = p->next;
    }
    return num;
}

template<class T> void list<T>::htot() {
    if (tail != NULL) {
        tail->next = head;
        tail = head;
        head = head->next;
        tail->next = NULL;
    }
}

template<class T> void list<T>::ttoh() {
    node *q, *p = head;
    q = p;
    if (p != NULL) {
        while (p->next) {
            q = p;
            p = p->next;
        }
        tail->next = head;
        head = tail;
        tail = q;
        tail->next = NULL; 
    }
}

template<class T> void list<T>::display() {
    node *p = head;
    while (p) {
        cout << p->data;
        p = p->next;
        if (p != NULL) {
            cout << " ";
        }
    }
    if (head == NULL) {
        cout << "emptylist";
    }
    cout << endl;
}


int main() { 

    string type;
    cin >> type;

    if (type == "char") {
        list <char> link1;
        list <char> link2;
        int num;
        cin >> num;
        for (int i = 0; i < num; i++) {
            char d;
            cin >> d;
            link1.Append(d);
            link2.Insert(d);
        }

        cout << link1.count() << endl;
        link1.display();
        link1.ttoh();
        link1.display();

        cout << link2.count() << endl; 
        link2.display(); 
        link2.htot();
        link2.display();
    }
    if (type == "int") {
        list <int> link1;
        list <int> link2;
        int num;
        cin >> num;
        for (int i = 0; i < num; i++) {
            int d; 
            cin >> d;
            link1.Append(d);
            link2.Insert(d);
        }
        cout << link1.count() << endl;
        link1.display();
        link1.ttoh();
        link1.display();

        cout << link2.count() << endl; 
        link2.display(); 
        link2.htot(); 
        link2.display();
    }
return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链表类模板list 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 重载<<的返回值

    include
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • 入门级详细USB移植教程——致正在为USB烦恼的朋友

    同上一篇MPU6050一样 我还是写一篇关于USB的帖子 在圈圈等玩USB的大神面前 我掌握的USB知识实在是九牛一毛 所以这篇帖子加上了入门级的修饰语 写这篇帖子主要是为了那些想快速开发USB的人 至于想深入了解USB协议 可以先学完我这
  • 游戏开发unity编辑器扩展知识系列:AssetDatabase.SaveAssets

    插眼 总结 在Editor运行c 脚本时 可以修改资源 这时如果想要保存修改 可以调用AssetDatabase SaveAssets 参考 官方文档 https docs unity3d com ScriptReference Asset
  • 记一次ES线上异常

    记一次ES线上异常解决过程 周六线上es报警es not green 由于没有带笔记本回家并且考虑到集群容量本身就很紧张以及最近的读写压力确实很大 并没有多余的机器可以加入集群 觉得应该不会是什么大问题 就没有太多在意 周末去上班打开电脑一
  • 如何调用百度接口来实现全国的撒点效果(在这里把百度接口的文档荡到本地了)

  • LogisticRegression用户流失预测模型初探【推荐】

    什么是逻辑回归 Logistic回归与多重线性回归实际上有很多相同之处 最大的区别就在于它们的因变量不同 其他的基本都差不多 正是因为如此 这两种回归可以归于同一个家族 即广义线性模型 generalizedlinear model 这一家
  • 「c++小学期」实验题目及代码

    面向对象编程的C 和平时做题用的C 还是有差距的 实验的题目都是小题目 就都做一下吧 实验一 简单C 程序设计 1 猜价格游戏 编写C 程序完成以下功能 1 假定有一件商品 程序用随机数指定该商品的价格 1 1000的整数 2 提示用户猜价
  • 【AI with ML】第 8 章 :使用 TensorFlow 创建文本

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • styled-components设置组件属性

    问题 最近在试着用react做一个音乐播放器 在这之前其实并不了解styled components 但由于使用css in js并且想实现hover效果 百度各种解决方案后发现了styled components这个好东西 如果你看到了这
  • RGMII接口(KSZ9031)

    概述 RGMII的时序是时钟双沿采样 在默认的RGMII时序中 时钟 RXC TXC 边沿与数据边沿 TXD RXD TX CTL RX CTL 的对齐 因此 FPGA想要正确收发数据 需要对TXC或RXC进行适当的延迟 由于最高时钟为12
  • 二手房交易差额款需要一次交清?

    在签订购房合同的时候 房东要求添加条款 在房产过户当日收取差额款 差额款应该一次性给他 还是可以按比例付 拿到房产证后付清 他给我写收条的时候 我应该注意什么 找法网小编为您详细介绍 网友咨询 我通过本地的老牌中介买房的 在签订购房合同的时
  • 时间序列数据特征提取TsFresh

    文章目录 1 源码和数据地址 2 TsFresh安装 3 代码部分说明 3 1 数据下载 3 2 从文件读取数据 4 特征拓展 4 1 默认参数 4 2 ComprehensiveFCParameters参数 4 3 EfficientFC
  • 电子工程师的自我修养 - OD输出

    开漏输出 Open Drain Output OD门 漏极开路 Open Drain 电路特点 利用外部电路的驱动能力 减少IC内部的驱动 可以将多个开漏输出的pin连接到一条线上 通过一个上拉电阻 在不增加任何器件的情况下 形成 线与 关
  • 使用myisamchK 命令修复数据

    使用myisamchk 命令修复表 myisam使用程序可以用来获得有关你的数据库表的统计信息 检查 修复 优化他们 命令格式 myisamchk option tables frm 常用的检查选项 information i 打印所检察标
  • 韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1...

    1 实验平台 ALIENTEK NANO STM32F411 V1开发板 2 摘自 正点原子STM32F4 开发指南 HAL 库版 关注官方微信号公众号 获取更多资料 正点原子 第三章 MDK5 软件入门 本章将向大家介绍 MDK5 软件和
  • Blazor组件自做四 : 使用JS隔离封装signature_pad签名组件

    运行截图 演示地址 响应式 感谢szimek写的棒棒的signature pad js项目 来源 https github com szimek signature pad 正式开始 1 在文件夹wwwroot lib 添加signatur
  • python3+requests+unittest实战系列【一】

    1 环境准备 python3 pycharm编辑器 2 框架目录展示 该套代码只是简单入门 有兴趣的可以不断后期完善 1 run py主运行文件 运行之后可以生成相应的测试报告 并以邮件形式发送 2 report文件夹存放测试结果报告 3
  • Python解偏微分方程

    2 u x
  • 能力强的项目经理是怎么催活儿的?(内附项目管理软件推荐)

    从确定做某个项目开始 项目经理就仿佛进入到了一个不断 催 的阶段 项目经理 催字符 恨不得贴到每个任务的负责人头上 仿佛项目经理除了开会就是催活儿 浪费大量精力和时间 今天分享的项目经理 催活儿指南 从计划 反馈以及隐形激励三个方面来梳理项
  • Linux 下的两个特殊的文件 -- /dev/null 和 /dev/zero 简介及对比

    1 概论 来自维基的解释 dev null 在类Unix系统中 dev null 或称空设备 是一个特殊的设备文件 它丢弃一切写入其中的数据 但报告写入操作成功 读取它则会立即得到一个EOF 在程序员行话 尤其是Unix行话中 dev nu
  • 链表类模板list

    描述 设计如下样式的链表类模板list 并对其进行简单使用 template