简单的线性单向链表

2023-11-05

数组的不足

我们之前用的数组也是一种数据结构,数组是顺序存储的,数组逻辑关系上相邻的两个元素在物理位置上也相邻,这就导致了在对数组进行插入或删除操作时,需移动大量数组元素,并且数组的长度是固定的,而且必须预先定义,数组的长度难以缩放,对长度变化较大的数据对象要预先按最大空间分配,使存储空间不能得到充分利用。

链表的优点

链表存储结构是一种动态数据结构。

它包含的数据对象的个数及其相互关系可以按需要改变。

存储空间是程序根据需要在程序运行过程中向系统申请获得。

不要求逻辑上相邻的元素在物理位置上也相邻。

没有顺序存储结构所具有的弱点。

链表

链表是指将若干个数据项按一定的原则连接起来的表。链表中每一个数据称为节点。链表连接的原则是: 前一个节点指向下一个节点;而且只有通过前一个节点才能找到下一个节点。

相信在很多地方都看到上面这么一段话,不理解没关系,我们一边看图一边解释。

上面这段抽象的概念相信大家都能明白,问题在于真正去写代码的时候,你就会发现,其实你只是看明白而已。

我学了链表两个月,一直不明白到底这个链表是怎么建立起来的,直到老师开讲,我才懂。

我相信,只有结合代码实现来讲解才能明白。

首先数组之所以能够随机访问存储,是因为数组是顺序存储的,但这也导致了数组删除插入很麻烦,因为人家已经安排好位置了,不能随便改变。

而链表不需要顺序存储,每一块存储元素的地方只要能知道下一个在哪里就可以了。

链表必须用上结构体,结构体包含两种成员,一种是想要存储的数据类型,一种是用来指向下一个节点的指针。

一切看代码解析:

#include<iostream>
using namespace std;
struct list//创建一个简单的链表节点 
{
	int num;//只是存储一个数 
	list *next;//指向下一个节点的指针,链表的关键 
};
int main()
{
	list *head=NULL,*chain=NULL,*data=NULL;//头指针用来记录这个链表的位置,另外两个指针用来推进节点的创建和连接
	//链表数据的输入 
	while(1)
	{
		data=new list;//首先分配一块内存 
		cin>>data->num;//读入数据并存储 
		if(head==NULL)//如果是第一个,那么要让头指针指向它 
		head=data;
		else//如果不是第一个,那么就让上一个节点的指针成员指向它 
		chain->next=data;
		chain=data;//让这个节点成为上一个节点 
		data->next=NULL;//表示尾节点 
		if(getchar()=='\n')//如果按下回车就不读了,不然就一直装 
		break;
	}
	//链表数据的输出 
	data=head;//找到链表的位置 
	while(data)//如果不是尾节点的指针,那就输出 
	{
		cout<<data->num<<' ';
		data=data->next;//推进 
	}
	//链表内存释放 
	data=head;//找到链表位置 
	while(data)//如果不是到尾了,那就继续释放 
	{
		chain=data->next;//先推进,不然先释放的话,后面的就找不到了 
		delete data;
		data=chain;
	}
}

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

简单的线性单向链表 的相关文章

  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • idea linux ssh乱码,idea--Preferences

    Font Font Monaco Size 16 Line spacing 1 3 Appearance Theme Darcula 勾选Use dark window headers 第三方主题 点击选择该主题 点击下载主题 下载文件是一
  • android webview 全屏100%显示图片

    这里引用 第三方类库 implementation org jsoup jsoup 1 10 2 定义工具类 HtmlUtils import org jsoup Jsoup import org jsoup nodes Document
  • C语言函数大全-- s 开头的函数(2)

    s 开头的函数 2 1 setlinestyle 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 setmem 2 1 函数说明 2 2 演示示例 3 setmode 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 se
  • Origin6.0使用的一个坑

    今天在使用Origin6在画图时 遇到的一个软件问题 数据量大概在几万个 这些数据中仅有一个数为1 其他皆为0 但是绘制出的图片全是0 只有在放大后 这个数据1才绘制出来 不放大的话全是0 Origin这个绘制逻辑很坑 会误导使用者 一定要
  • Vue+高德地图api

    文章目录 前言 一 准备工作 1 申请应用 2 引入 3 创建地图 二 使用高德地图 1 覆盖物 1 点标记 2 海量点标记 3 轨迹回放 2 矢量图形 1 多边形 3 图层 1 热力图 2 Canvas图层 4 坐标转换 前言 项目使用了
  • GD32F103基础教程—按键输入实验(七)

    一 教程简介 本章主要是讲解GPIO输入实验 及相关GPIO输 出配置方法 通过使用按键控制LED的亮灭 二 实验流程 1 工程配置 按键实验工程配置方法与第五章的配置方法一致 具体请查看第五章教程 本章不再赘述 本章增加一个KEY c与K
  • 监狱智能管理平台 ——监室点名(人脸识别)

    从事人脸识别行业渐进2年 主要开发监狱的人脸识别服务 内心一直有一个梦想 打造出一款智能化的现代化的监狱管理系统 不过要智能化到什么程度 心里却没有普尼 恐怕是从事IT行业后 总想设计出一款满意的产品 对自己从事该行业有一个交代做的怪吧 自
  • 基于深度学习的高精度烟雾检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要 基于深度学习的高精度烟雾检测识别系统可用于日常生活中或野外来检测与定位烟雾目标 利用深度学习算法可实现图片 视频 摄像头等方式的烟雾目标检测识别 另外支持结果可视化与图片或视频检测结果的导出 本系统采用YOLOv5目标检测模型训练数据
  • import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt from torch imp...

    这是一段 Python 代码 主要是在导入一些库和定义一个神经网络模型类 Net 代码中导入了 torch torch nn numpy 和 matplotlib pyplot 库 并在 Net 类中进行了一些初始化 代码还提到了一个微分方
  • mybatis中使用map批量更新

    最近项目中会用到批量更新功能 数据是存在map中的 key作为更新的id 而value作为更新的值 纠结了很久最后算是解决了 特此记录 希望对有需要的有一定帮助
  • 数据库数据库连接:1、短连接 2、长连接  3、连接池介绍和区别

    一 数据库连接 1 短连接 2 长连接 3 连接池 二 短连接 短连接是指程序与数据库通信时建立的连接 执行操作后 马上就关闭 短连接简单地来说 就是每次操作数据库 都要打开和关闭数据连接 基本操作是 连接 数据传输 关闭连接 三 长连接
  • Android TextView 属性 textsize 的单位是什么?

    首选我们找到 源码中的TextView 找到 textsize 属性 一个 int 类型默认值为 15 初使化自定义属性 我们看一个 getDeimensionPixelSize 方法的解释可以看出 获取 是 15 单位是什么 是px 那我
  • 蓝桥真题-网站扩张

    代码 package com hualing lanqiao import java util Scanner public class Expansion 网站扩张 规则 第一个人使用7天后 在第八天可以邀请另一个人使用 后每隔两天可以邀
  • 应急响应 - Windows启动项分析,Windows计划任务分析,Windows服务分析

    作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 推荐专栏 对网络安全感兴趣的小伙伴可以关注专栏 网络安全入门到精通 Windows应急响应 一 启动项分析 1 msconfig 2 gpedit ms
  • Mybatis

    第1章 框架概述 1 1 软件开发常用结构 1 1 1 三层架构 三层架构包含的三层 界面层 User Interface layer 业务逻辑层 Business Logic Layer 数据访问层 Data access layer 三
  • 小熊带你学Python(六)——字符串

    上一节提到序列的应用 序列就是指代的字符串 列表 元组 集合 字典等数据结构的一个集合 我们先从字符串开始讲起 字符串 是一串字母的集合 我们在编程实现各种功能时 很多时候其实都是在操作这些字符串 字符串的变化中实现了各种功能 1 字符串的
  • Springboot项目优化日志logback-spring.xml详解

    Springboot项目优化日志logback spring xml详解 一 描述 二 配置文件 三 效果 一 描述 几种常见的日志 Log4j 是最早的日志框架 是apach旗下的 可以单独使用 也可配合日志框架JCL使用 Log4j2
  • 仅提供信息存储空间服务器,Docker本身的存储空间管理

    原标题 Docker本身的存储空间管理 目标 两台host主机透过一个网络接口共享磁盘设备 iSCSI 共享设备的主机和名字 target dev loop8 gt initiator dev sdb gt initiator docker
  • 摄影毁一生单反穷三代顺口溜_什么?这点预算你竟买了一套摄影设备!

    图片 来自网络 文字 小松鼠 看了文章标题而点进来的朋友们 都是有这方面想法的 本文适合于家境一般的业余摄影爱好者 如果家里有矿或是立志成为专业摄影师的 就没必要往下看了 注 文末有福利 以下为正文 先来一组图 光照的光 花光的光 俗话说
  • 简单的线性单向链表

    数组的不足 我们之前用的数组也是一种数据结构 数组是顺序存储的 数组逻辑关系上相邻的两个元素在物理位置上也相邻 这就导致了在对数组进行插入或删除操作时 需移动大量数组元素 并且数组的长度是固定的 而且必须预先定义 数组的长度难以缩放 对长度