第一百零六天学习记录:数据结构与算法基础:单链表(王卓教学视频)

线性表的链式表示和实现

结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻
线性表的链式表示又称为非顺序映像或链式映像。
用一组物理位置任意的存储单元来存放线性表的数据元素。
这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。
链表中元素的逻辑次序和物理次序不一定相同。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单链表、双链表、循环链表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

链表(链式存储结构)的特点

1、结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻。
2、访问时只能通过头指针进入链表,并通过每个结点的指针域依次向后顺序扫描其余结点(顺序存取法),所以寻找第一个结点和最后一个结点所花费的时间不等。
在这里插入图片描述
在这里插入图片描述

单链表的定义和表示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单链表的基本操作的实现☆☆☆☆

在这里插入图片描述
用C++实现:

My_List* initList()
{My_List* temp = new My_List;temp->pnext = NULL;return temp;
}

在这里插入图片描述

bool ListEmpty(My_List* temp)
{if (temp->pnext == NULL){return true;}else{return false;}
}

在这里插入图片描述
在这里插入图片描述

void My_DeleteAll(My_List* temp)
{My_List* p;while (temp){p = temp;temp = temp->pnext;delete p;}
}

在这里插入图片描述

void My_ClearAll(My_List* temp)
{My_List* p;My_List* q;p = temp->pnext;while (p){q = p->pnext;delete p;p = q;}temp->pnext = NULL;
}

在这里插入图片描述
在这里插入图片描述

int ListLength(My_List* temp)
{My_List* p;p = temp->pnext;int num = 0;while (p){++num;p = p->pnext;}return num;
}

老师建议:基础且极其重要,必须熟练掌握。
在这里插入图片描述
在这里插入图片描述
较复杂函数的实现:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

bool GetRnum(My_List* temp, int i, My_List* &mycache)
{My_List* p;p = temp->pnext;int j = 1;while (p&&j<i){p = p->pnext;++j;}if (!p || j>i){return false;}mycache = p;return true;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

int LocateR(My_List* temp, int change)
{int j = 1;My_List* p = temp->pnext;while (p&&p->pdata.My_num!=change){p = p->pnext;++j;}if (p!=NULL){return j;}else{return 0;}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bool ListInsertfromI(My_List* temp, int i, My_List* mycache)
{int j = 0;My_List* p = temp;while (p&&j<i-1){p = p->pnext;++j;}if (!p || j>i - 1){return false;}mycache->pnext = p->pnext;p->pnext = mycache;return true;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bool ListDelete(My_List* temp, int i)
{My_List* p = temp;int j = 0;while (p->pnext&&j<i-1){p = p->pnext;++j;}if (!(p->pnext) || j>i - 1){return false;}My_List* q = p->pnext;p->pnext = q->pnext;delete q;return true;
}

时间复杂度分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bool FrontInsert(My_List* temp)
{My_List* insertcache = new My_List;while (true){cout << "请输入您所要添加资源的编号>=" << endl;cin >> insertcache->pdata.My_num;if (cin.fail()) {cout << "您输入的不是一个整数,请重新输入:" << endl;cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');continue;}cout << "请输入您所要添加资源的名字>=" << endl;cin >> insertcache->pdata.My_name;if (cin.fail()) {cout << "您输入的不是一个正确的名字,请重新输入:" << endl;cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');continue;}cout << "请输入您所要添加资源的剩余量>=" << endl;cin >> insertcache->pdata.My_Resources;if (cin.fail()) {cout << "您输入的不是一个整数,请重新输入:" << endl;cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');continue;}break;}insertcache->pnext = temp->pnext;temp->pnext = insertcache;cout << "需要继续添加吗?1、需要;其他、不需要" << endl;int tempnum;cin >> tempnum;if (cin.fail()) {tempnum = 0;cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');}if (tempnum == 1){return true;}else{return false;}
}

在这里插入图片描述
在这里插入图片描述

bool AfterInsert(My_List* temp)
{My_List* insertcache = new My_List;while (temp->pnext){temp = temp->pnext;}while (true){cout << "请输入您所要添加资源的编号>=" << endl;cin >> insertcache->pdata.My_num;if (cin.fail()) {cout << "您输入的不是一个整数,请重新输入:" << endl;cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');continue;}cout << "请输入您所要添加资源的名字>=" << endl;cin >> insertcache->pdata.My_name;if (cin.fail()) {cout << "您输入的不是一个正确的名字,请重新输入:" << endl;cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');continue;}cout << "请输入您所要添加资源的剩余量>=" << endl;cin >> insertcache->pdata.My_Resources;if (cin.fail()) {cout << "您输入的不是一个整数,请重新输入:" << endl;cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');continue;}break;}insertcache->pnext = NULL;temp->pnext = insertcache;cout << "需要继续添加吗?1、需要;其他、不需要" << endl;int tempnum;cin >> tempnum;if (cin.fail()) {tempnum = 0;cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');}if (tempnum == 1){return true;}else{return false;}
}

最后代码运行如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21600.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#生成类库dll以及调用实例

本文讲解如何用C#语言生成类库并用winform项目进行调用 目录 创建C#类库项目 Winform调用dll 创建C#类库项目 编写代码 using System.Threading;namespace ClassLibrary1 {public class Class1{private Timer myTimer = null;//定义定时器用于触发事件//定义公共的委托和调…

短视频抖音seo矩阵系统源码开发者思路(一)

一套优秀的短视频获客系统&#xff0c;支持短视频智能剪辑、短视频定时发布&#xff0c;短视频排名查询及优化&#xff0c;短视频智能客服等&#xff0c;那么短视频seo系统具体开发应该具备哪些功能呢&#xff1f;今天小编就跟大家分享一下我们的技术开发思路。 抖音矩阵系统源…

Qt Https通信: TLS initialization failed 解决方法

Qt Https通信&#xff1a; TLS initialization failed 解决方法&#xff0c;Window端使用Qt 做开发请求Https资源时&#xff0c;会经常遇到 TLS initialization failed。 原因分析&#xff1a; 在Qt中并未包含 SSL所包含的库&#xff0c;因此需要开发者&#xff0c;自己将库拷贝…

百度iOS端长连接组件建设及应用实践

作者 | 百度消息中台团队 导读 在过去的十年里&#xff0c;移动端技术飞速发展&#xff0c;移动应用逐渐成为主要的便捷访问和使用互联网的方式&#xff0c;承接了越来越多的业务和功能&#xff0c;这也意味着对移动端和服务器之间的通信效率和稳定性提出了更高的要求。为了实现…

C语言实现简易通讯录

目录 普通版 功能需求 模块设计 test.c模块实现 contact.h模块实现 类型的声明 函数的声明 头文件、枚举、宏定义 contact.c 模块实现 初始化通讯录 增加联系人 显示所有联系人的信息 查找函数 删除指定联系人 查找指定联系人 修改指定联系人 进阶版通讯录&a…

基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件

系列文章目录 基于scrcpy的远程调试方案 基于scrcpy的Android群控项目重构 基于scrcpy的Android群控项目重构 进阶版 基于scrcpy的Android群控项目重构&#xff0c;获取Android屏幕元素信息并编写自动化事件&#xff08;视频&#xff09; 基于scrcpy的Android群控项目重构…

面向个人的免费组态软件:摩尔信使MThings

产品官网 现代工业自动化各行各业中均广泛应用工控上位机软件&#xff0c;但同时也面临着一系列挑战和复杂性。 多样化设备组网&#xff1a;工控系统包含不同厂家的各类硬件和设备&#xff0c;如传感器、执行器、PLC等。工控上位机软件需要与不同类型的设备进行集成和通信&am…

C++常用库函数 2.字符分类函数

函数名&#xff1a;isalnum 函数原型&#xff1a;int isalnum(int c)&#xff1b; 所需头文件&#xff1a;<cctype> 功能&#xff1a;测试 c 是否字母或数字。 返回值&#xff1a;如果 c 在 A&#xff5e;Z、a&#xff5e;z 或0&#xff5e;9的范围内&#xff0c;则返回…

[Linux] 最基础简单的线程池 及其 单例模式的实现

本篇文章主要用到线程相关内容, 下面是博主关于线程相关内容的文章: [Linux] 线程同步分析&#xff1a;什么是条件变量&#xff1f;生产者消费者模型是什么&#xff1f;POSIX信号量怎么用&#xff1f;阻塞队列和环形队列模拟生产者消费者模型 [Linux] 线程互斥分析: 多线程的问…

使用claude 2的文档分析功能

复制一段较长的文本内容&#xff0c;比如json文件。 https://zh.annas-archive.org/db/aarecord/md5:ba19176859126615bba9f35110f7492e.json 打开claude 2网页。 在输入框中粘贴内容&#xff0c;会自动生成一个past.txt图标。 输入要问的问题&#xff0c;按回车。 结果如下&a…

外网SSH远程连接linux服务器「cpolar内网穿透」

文章目录 1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不需要设置路由器。…

分层解耦-IOCDI-DI详解

目录 Bean注入 小结 依赖注入的注解 Resource和Autowired区别 Bean注入 Autowired注解&#xff0c;默认是按照类型进行依赖注入&#xff0c;如果存在多个相同类型的bean就会报错 解决方案 Primary&#xff08;设置bean的优先级&#xff09; Qualifier&#xff08;通过bean…