C++ <类C:单链表的插入、查找、删除>

数据结构单链表基本操作(C/C++实现) 数据结构-单链表-基本操作(C/C++实现) 注意:本代码为了测试运行默认含有操作所需数据,如有需要可自己增删改相关数据 涉及基本运算 初始化单链表 依次采用尾插法插入元素 输出单链表 输出单链表的长度 判断单链表是否为空 输出单链表的第n个元素 输出元素x的位置 在第n个元素位置上插入x元素 输出单链表 删除单链表的第n个元素 输出单链表 释放单链表 GitHub地址(包含.cpp文件和可执... 阅读详情

运行结果:

 Rolls  10
Jam  3
Tea  2
Enter you want to insert after the item: Rolls
Enter the insert item: Lisa
Enter the insert count: 11
Rolls  10
Lisa  11
Jam  3
Tea  2
Do you want to continue <y/n>?: y
Enter you want to insert after the item: Tea
Enter the insert item: Kevin
Enter the insert count: 13
Rolls  10
Lisa  11
Jam  3
Tea  2
Kevin  13
Do you want to continue <y/n>?: y
Enter you want to insert after the item: Jam
Enter the insert item: Sam
Enter the insert count: 3
Rolls  10
Lisa  11
Jam  3
Sam  3
Tea  2
Kevin  13
Do you want to continue <y/n>?: n
Enter you want to delete item name: Kevin
Rolls  10
Lisa  11
Jam  3
Sam  3
Tea  2
Do you want to continue <y/n>?: y
Enter you want to delete item name: Rolls
Lisa  11
Jam  3
Sam  3
Tea  2
Do you want to continue <y/n>?: y
Enter you want to delete item name: Sam
Lisa  11
Jam  3
Tea  2
Do you want to continue <y/n>?: n

linkList.cpp

#include <iostream>
#include <cstddef>
#include <string>
#include <cstdlib>

using namespace std;

struct Node {
    string item;
    int count;
    Node* link;
};

typedef Node* NodePtr;

void apped(NodePtr& head, string item, int count);
void show(NodePtr& head);
void insertAfter(NodePtr pos, string item, int count);
void remove(NodePtr pos);
NodePtr searchFront(NodePtr head, string afterMe);

int main() {
    using std::cout;
    using std::cin;

    NodePtr head = nullptr;
    string s, str, name;
    int cn;

    apped(head, "Tea", 2);
    apped(head, "Jam", 3);
    apped(head, "Rolls", 10);

    show(head);

    char c;
    do {
        cout << "Enter you want to insert after the item: ";
        cin >> s;

        NodePtr pos = searchFront(head, s);

        if(pos != nullptr) {
            cout << "Enter the insert item: ";
            cin >> str;

            cout << "Enter the insert count: ";
            cin >> cn;

            if (head == pos)
                insertAfter(pos, str, cn);
            else
                insertAfter(pos->link, str, cn);

            show(head);
        }
        else {
            cout << "Not found on the list.\n";
            exit(EXIT_FAILURE);
        }
        cout << "Do you want to continue <y/n>?: ";
        cin >> c;
    } while (c == 'y' || c == 'Y');

    do {
        cout << "Enter you want to delete item name: ";
        cin >> name;

        NodePtr pos = searchFront(head, name);

        if(pos != nullptr) {
            if (head == pos) {
                head = head->link;
                pos->link = nullptr;
                delete pos;
            }
            else
                remove(pos);

            show(head);
        }
        else
            cout << "Not found on the list.\n";

        cout << "Do you want to continue <y/n>?: ";
        cin >> c;
    } while (c == 'y' || c == 'Y');

    return 0;
}

NodePtr searchFront(NodePtr head, string afterMe) {
    using std::cout;

    NodePtr tempPtr = head;
    NodePtr FrontPtr = head;
    if (head == nullptr)
        cout << "The list link is empty.";
    else {
        while (tempPtr != nullptr) {
            if (tempPtr->item == afterMe)
                return FrontPtr;
            FrontPtr = tempPtr;
            tempPtr = tempPtr->link;
        }
    }

    return nullptr;
}

void apped(NodePtr& head, string item, int count) {
    NodePtr afterPtr = new Node;
    afterPtr->item = item;
    afterPtr->count = count;
    afterPtr->link = head;
    head = afterPtr;
}

void show(NodePtr& head) {
    using std::cout;

    NodePtr tempPtr = head;
    while (tempPtr != nullptr) {
        cout << tempPtr->item << "  " << tempPtr->count << '\n';
        tempPtr = tempPtr->link;
    }
}

void insertAfter(NodePtr pos, string item, int count) {
    using std::cout;

    NodePtr  tempPtr = new Node;

    tempPtr->item = item;
    tempPtr->count = count;
    tempPtr->link = pos->link;
    pos->link = tempPtr;

}

void remove(NodePtr pos) {
    NodePtr pNext = pos;
    pos->link = pos->link->link;

    delete pNext->link;
}
单链表的基本操作(c++实现) (1)编程实现单链表的基本操作:建立单链表,查找单链表,插入单链表,删除单链表; (2)采用单链表结构编程实现:两个有序单链表的归并运算。 /* (1) */ #include <iostream> typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; bool InitList(... 阅读详情

相关推荐

C++/Qt版OA办公管理系统通知公告模块

这里展示了一个通知公告模块窗口,其中包括一个通知公告列表和一个添加通知公告的按钮。点击添加按钮后,会弹出一个对话框,用户可以输入通知公告的标题和内容。点击确认按钮后,将会创建一个通知公告对象,并将其添加到通知公告列表中。// 创建对话框输入通知公告标题和内容。// 将通知公告添加到列表中。// 创建通知公告对象。// 创建添加通知公告按钮。// 创建通知公告列表。// 创建通知公告模块窗口。// 自定义通知公告模块窗口类。// 自定义通知公告类。

xcksj888的博客 812

C++单链表实现(插入,查找,删除,销毁)

#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; struct Data{ //数据部分 int key; //... bool operator==(const Data&amp; d)const{ //重载运算符== return key == ...

天马行空 5945

单链表的建立、查找、删除、插入

单链表的头插入、尾插入、以及查找、删除、逆置等操作

c++ 链表操作:添加、遍历、删除、查找

链表是一种动态数据结构,因为在创建链表的时候,无需知道链表的长度。链表的每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 struct node { int value; node* next; }; 当插入一个结点的时候,我们只需要为新结点分配内存,然后调节结点的指针指向,新结点就被(逻辑上)链接到链表里。 /* 链表尾加入新元素*/

yes1cpp的专栏 2万+

oa系统.rar

一个简单的OA系统供大家参考,前端采取bootstrap设计,后端采取ssm框架实现,因为是毕业项目所以内容还不够完善

C++ SQL 全套OA源码

全套OA源码 C+ + SQL,仅供学习交流

C语言数据结构 单链表的建立、遍历、查找、插入和删除操作

链表(Linked List)是一种物理存储单元上非连续、非顺序的数据结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表由一系列结点(node,链表中每一个元素称为结点)组成,每一次为一个结构体 动态分配的内存空间,可称之为一个结点,每个结点之间可以是不连续的,但结点内是连续的。结点个数是不受限定的,可以随时删改,这是与数组相比的优点。.........

追求。 1万+

【吐血推荐】史上最全的OA系统源码合集

史上最全的OA系统源码合集,共5款,精心收集整理,具有极高的参考价值。

C/C++ 单链表的创建、插入、删除、查找实现(简单 - 完整代码)

单链表的增删改查实现 温馨提示:阅读本文需要15-25分钟 单链表的创建第一步也是最重要的一步就是要创建结构体,怎样创建结构体好理解呢?以下的定义结构体的方式是我看过那么多别人的代码以来让我感觉最容易看懂的,对新手也是很友好的,反正我创建新结点或者是传参只需要写一种形式struct List* ptr = ...; 就可以了。 struct List { int val;...

SanpTap的博客 3万+

OA协同办公自动化系统

绝对是免费OA最好的一款!这是以前公司RMB买来的 admin zcl2615553 功能非常强大的OA企业智能办公自动化系统;WINDOWS操作界面,操作简单方便;可直接在网上租用虚拟空间上运行; 功能包括: 1、公共信息 公司通告、工作计划、通讯助理、客户资源、公共资源、资源预约 2、公共传阅 发送公文、已发公文、已收公文、公文管理 3、个人办公 个人工作计划、个人基本档案、个人通讯录、个人资料维 4、系统设置、用户管理、增加数据、数据搜索、数据报表、数据导出、转移数据、所有数据、注销系统 5、员工管理 员工基本档案、员工职位变动、员工奖惩情况、员工考核情况、员工工资档案 6、个人邮箱 发邮件、未读邮件、收件夹、寄件夹、垃圾桶、公共邮箱 7、用户设置 增加下属用户、管理下属用户、增加用户、管理用户、单位名称维护、用户管理权限、工作计划权限、通告公文权限、职务变动权限、奖惩编辑权限、考核编辑权限、工资编辑权限、通讯资料权限、资源管理权限、考勤管理权限、基本档案权限

C++ 链表操作(建立、添加、删除、查找、排序、索引等)

C++ 链表操作(建立、添加、删除、查找、排序、索引等); 包含:结构体、纯虚接口、继承等技术;

c++(1): c++单链表的创建、查找、插入、删除

但各个节点还是独立的,并没有关系,并没有上个节点的next存放了下个节点的地址。上个节点next存放了下个节点的关系,就可以从当前节点找到下个节点,所以我们说各个节点是连着的,这样才能称为一个链表。实现指向下个节点,当j=i时,输出找到节点p_i对应的数据。按照生成head节点的方法,生成子节点也可以用类似的方法。,链表的前一个节点的指针域,存放的是下一个节点的地址。,也就是说随着节点的移动,他们的上一个节点。的值,对于下个节点的pre就是当前节点。存放下个节点的地址,下个节点的类型为。...

@bangbang的博客 1万+

Bladed风电仿真软件新手必看:从界面操作到功率曲线计算的完整指南

本文为风电工程师提供Bladed仿真软件的完整入门指南,涵盖界面操作、功率曲线计算及动态仿真等核心功能。通过实战技巧和常见问题解决方案,帮助新手快速掌握这款全球领先的风电机组仿真工具,提升风电项目开发效率。

weixin_30839881的博客 102

线性表之单链表的建立、删除、查找、插入、删除和归并(合并)(附C++程序)

本文详细介绍了单链表的建立、删除、查找、删除和归并的数据结构,并给出了c/c++的代码。

ch18328071580的博客 3930

Scissor算法实战:利用bulkRNA表型数据精准定位单细胞亚群

本文详细介绍了Scissor算法的实战应用,该算法通过整合bulkRNA-seq的丰富表型信息与单细胞数据,精准识别与特定临床结局(如不良预后)相关的单细胞亚群。文章深入解析了算法三步走的核心思想,并提供了适配Seurat v5的完整代码解决方案,帮助研究者从海量数据中提炼具有生物学和临床价值的洞见。

ww90123的博客 254

Data+AI新玩法:Text2SQL让数据查询变得如此简单!

你是不是也遇到过这种情况?明明手头有海量数据,却因为SQL这道“门槛”,让分析和决策变得复杂和拖沓。你可能想着:“要是我能直接用自然语言和数据库对话,那该多好!你不是一个人在这样想,Text2SQL技术正是为了帮你摆脱这一困境而诞生的。

Ase5gqe的博客 865

单链表的初始化,建立,插入,查找,删除。

//////////////////////////////////////////// //单链表的初始化,建立,插入,查找,删除。// //Author:Wang Yong // //Date: 2010.8.19 // //////////////////////////////////////////// #include &l...

weixin_30814223的博客 3135

【OpenCV】第二十四章: 图像特征匹配:暴力特征匹配算法、FLANN特征匹配算法

参数match就是匹配器的匹配结果;参数crossCheck表示交叉检查,意思就是用第一组中的每个描述子和第二组的所有描述子进行匹配完后,再用第二组中的每个描述子和第一组的所有描述子进行匹配,这两步做完后,两步同时找到的相同的匹配对儿就是有效的匹配。方法一:用匹配器的match方法,进行特征匹配:match = bf.match(des1, des2),就是对两幅图的描述子进行计算,返回匹配的结果。匹配的时候是计算两个描述子之间的相似度,然后返回相似度最高的一对儿匹配点,也就是最终的匹配结果。

因为热爱所以坚持 5061

单链表的多语言表达:C++、Java、Python、Go、Rust

是一种链式数据结构,由一个头节点和一些指向下一个节点的指针组成。每个节点包含一个数据元素和指向下一个节点的指针。头节点没有数据,只用于表示链表的开始位置。单链表相对于数组的优点是插入和删除元素时不需要移动其他元素,时间复杂度为O(1)。但是,在查找元素时,单链表比数组要慢,时间复杂度为O(n)。

汉阳Hann's Home 7292

C#里用HttpListener实现WEB API接口服务端

本文介绍了一个基于WinForm的HTTP服务实现方案。该方案使用HttpListener类创建了一个支持JSON POST请求处理的轻量级Web服务器,主要特点包括:1) 纯线程方式实现请求监听和处理;2) 提供标准化的JSON响应格式;3) 支持自定义请求处理逻辑;4) 包含完整的日志记录功能。代码示例展示了如何初始化服务、处理不同类型的请求(包括JSON POST),并提供了线程安全的UI更新机制。该实现适用于需要简单HTTP接口的Windows桌面应用程序,可作为程序间通信的基础设施。

大坡3D软件开发 228

OceanBase容量统计:租户、数据库、表大小

🍎 数据库版本:OceanBase V4。

Sebastien23的博客 1405

C/C++学习(七)单链表的头插法,尾插法,元素插入、删除和查找 .

链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的。在C语言中,链表是通过指针相关实现的。而单链表是链表的其中一种,关于单链表就是其节点中有数据域和只有一个指向下个节点的指针域。创建单链表的方法有两种,分别是头插法和尾插法。所谓头插法,就是按节点的逆序方法逐渐将结点插入到链表的头部。反之尾插法就是按节点的顺序逐渐将节点插入到链表的尾部。相对来说,头插法要比尾插法算法简单,但是最后产生

阳仔的博客 8888

小论文/大论文必备 | RT-DETR目标检测、数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强,助力小论文和大论文实验涨点策略,平均提升模型mAP约1-2个百分点

RT-DETR目标检测数据增强策略研究 ,本文针对RT-DETR目标检测模型提出9种数据增强方法,包括几何变换(水平/垂直翻转、中心裁剪)、光照调整(亮度、对比度)和噪声添加(高斯/椒盐噪声)等。所有增强操作均保持图像与标签同步变换,确保训练数据的准确性。实验表明,该策略可提升模型mAP 1-2个百分点,对小目标检测效果尤为显著。文中提供了完整的Python实现代码,支持批量处理图像和标签文件,并详细说明了各增强方法的功能特点。该方法通过提升数据多样性,有效增强了模型在复杂场景下的鲁棒性和泛化能力。

Ai缝合怪、助力小伙伴高效发论文 462

C/C++数据结构(二) —— 单链表

【数据结构系列】线性表之链表的基本操作

Edison's 小宇宙 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【数据结构】第二章线性表:单链表的定义、插入和删除、查找、建立

2.3.1 单链表的定义 用链式存储的线性表统称为链表,本小节将会依次学习单链表、双链表、循环链表、静态链表。 一、什么是单链表 二、用代码定义一个单链表 (1)结构体变量和结构体类型的定义 菜鸟教程链接: 结构体变量和结构体类型的定义 | 菜鸟教程 typedef 关键字,将 struct LNode 这个结构体类型名字重新定义为 LNode 和 *LinkList(用来表示指向struct LNmde的指针); 下次想定义一个 struct LNode 结构体变量时,直接 L..

weixin_37706349的博客 4125

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: C++ <二分查找法>
下一篇: C++ <ADT:单链表追加、选择排序、删除>
Okwarry
博客等级 码龄15年 21粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值