数据结构和算法学习记录——线性表之单链表(上)-初始单链表及其头插函数(顺序表缺陷、单链表优点、链表打印)

news2024/11/19 1:45:20

单链表的概念

单链表是一种链式存取的数据结构,链表中的数据是以结点来表示的。
每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置)。
元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
以“结点的序列”表示的线性表称作线性链表(单链表),单链表是链式存取的结构。

复习一下之前学过的顺序表:

顺序表的缺陷
1.当空间不够时需要增容,而增容需要付出代价,浪费一些空间。
2.为了避免频繁增容,一般地,增容时都增至原本容量的2倍;这样就会可能存在一部分空间没有被使用的情况。
3.顺序表的数据是从开始的位置连续存储的,当需要从头部或者中间插入或删除数据时,就需要挪动数据,效率不高。

顺序表的优势
1.支持随机访问。
(有些算法需要结构支持随机访问,比如:二分查找、优化的快速排序等等)

而链表呢

链表的优势
1.按需申请空间,不用了就释放空间(更合理地使用空间)。
2.在头部或中间插入或删除数据时,不需要挪动数据,效率较高。

链表的缺陷
1.每一个数据,都要存一个指针去链接后面的数据结点。
2.不支持随机访问。

单链表的结构

逻辑结构

想象出来的、便于理解的

物理结构

内存中实际如何存储的

代码呈现

//单链表的基本结构
#define SLTDataType int
typedef struct SListNode
{
    SLTDataType data;
    struct SListNode * next;
}SLTNode;

单链表的打印

//单链表的打印
void SListPrint(SLTNode* phead)
{  //创建一个临时结点,将phead赋给cur
  SLTNode* cur = phead;
  
  //判断cur是否等于空
   while(cur != NULL)
   {
     //打印链表数据
     printf("%d->",cur->data);
     
     //找下一块的数据,就要找下一个结点
     //而下一个结点存放于cur中,通过cur找到下一个结点
     //一直循环,直到next指针指向NULL时,链表打印完成
     cur = cur->next;
   }
}

单链表的尾插函数

要实现单链表尾插,首先判断传入的链表是否为空,如果为空,则直接给其赋值。

如果不为空,则需要找到最后一个结点,即尾结点。尾结点的特征是:next指针指向NULL。

通过这一特征找到尾结点,再将新结点赋给尾结点。同时新结点的next指针指向NULL。

//单链表尾插函数
void SListPushBack(SLTNode ** pphead,SLTDataType x)
{  //创建一个新结点
   SLTNode * newnode = (SLTNode *)malloc(sizeof(SLTNode));
   newnode->data = x;
   newnode->next = NULL;
  //当传入的链表为空时,要先给其赋值,才能进行后面的操作
  //二级指针pphead存储着一级指针变量phead的地址,解引用一次得到phead的地址
   if(*pphead == NULL)
   {
       *pphead = newnode; //将新结点赋给头结点
   }
   else
   {
       //要进行尾插,就要先找到尾结点
       //尾结点的特征:next指针为空指针
       //建立一个新结点,命名为尾结点
       SLTNode * tail = *pphead;
       while(tail->next != NULL)//遍历找到尾结点
       {
           tail = tail->next;
       }
       tail->next = newnode;
   }
}

end


学习自:比特徐靖杭——数据结构与算法课程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes Service简介

Service 之前我们了解了Pod的基本用法,我们也了解到Pod的生命是有限的,死亡过后不会复活了。我们后面学习到的RC和Deployment可以用来动态的创建和销毁Pod。尽管每个Pod都有自己的IP地址,但是如果Pod重新启动了的话那么他的IP很有可能也就变…

cocos2dx+lua学习笔记:事件派发器CCEventDispatcher

前言 本篇在讲什么 cocos2dx内关于事件监听和派发的调度器EventDispatcher相关内容 本篇适合什么 适合初学Cocos2dx的小白 适合想要学习EventDispatcher的新手 本篇需要什么 对Lua语法有简单认知 对C语法有简单认知 对Cocos2dx有简单认知 Cocos2dx-Lua的开发环境 依…

【Spring事物三千问】DataSource的设计和常用实现——Hikari、Druid

javax.sql.DataSource javax.sql.DataSource 是 jdk 提供的接口,各个连接池厂商 和 Spring 都对 DataSource 进行了设计和实现。 javax.sql.DataSource 是连接到物理数据源的工厂接口。它是 java.sql.DriverManager 功能的替代者,是获取数据库连接的首选…

H5视频付费点播打赏影视系统程序全开源运营版,含完整的前后台+数据库

源码介绍: 这是一个非常棒的精品代码,之前官方网站售价可是超过2w的。我拿过来了简单测试了一下,完美。好久没有遇到这么好的代码了,特此整理了一份完整的搭建教程并分享一下。 thinkphp开发,前后端分离设计&#xf…

Vue3做出B站【bilibili】 Vue3+TypeScript+ant-design-vue【快速入门一篇文章精通系列(一)前端项目案例】

本项目分为二部分 1、后台管理系统(用户管理,角色管理,视频管理等) 2、客户端(登录注册、发布视频) Vue3做出B站【bilibili】 Vue3TypeScriptant-design-vue【快速入门一篇文章精通系列(一&…

ASEMI高压MOS管20N60参数,20N60尺寸,20N60体积

编辑-Z ASEMI高压MOS管20N60参数: 型号:20N60 漏极-源极电压(VDS):600V 栅源电压(VGS):30V 漏极电流(ID):20A 功耗(PD&#xff…

项目最后一刻发生范围变更该怎么处理?

不管是项目需求发生了变化,还是第一轮可交付成果没有完全达到预期,在项目范围定义的初始阶段之后可能发生变化的原因有很多。当这种情况发生时,你需要准备好一个计划来处理最后一刻的范围变更和调整。 什么是范围变更? 范围变更是…

浪潮 KaiwuDB x 山东重工 | 打造离散制造业 IIoT 标杆解决方案

近日,浪潮 KaiwuDB 携手山东重工集团有限公司(以下简称:山东重工)重磅发布“离散制造业 IIoT 解决方案”。该 IIoT 方案以 KaiwuDB 就地运算专利技术为底座,搭建了”多快优智”的“13N”方案体系,目前已率先…

南京、西安集成电路企业和高校分布一览(附产业链主要厂商及高校名录)

前言 3月2日,国务院副总理刘鹤在北京调研集成电路企业发展,并主持召开座谈会。刘鹤指出,集成电路是现代化产业体系的核心枢纽,关系国家安全和中国式现代化进程。他表示,我国已形成较完整的集成电路产业链,也…

视频理解论文串讲——学习笔记

文章目录DeepVideoTwo-StreamBeyond-short-SmippetsConvolutional FusionTSNC3DI3DNon-localR(21)DSlowFastTimesformer本文是对视频理解领域论文串讲的笔记记录。 一篇相关综述:Yi Zhu, Xinyu Li, Chunhui Liu, Mohammadreza Zolfaghari, Yu…

【YOLO】YOLOv8训练自定义数据集

1. 运行环境 windows11 和 Ubuntu20.04(建议使用 Linux 系统) 首先切换到自己建立的虚拟环境安装 pytorch torch 1.12.0cu116(根据自身设备而定) torchvision 0.13.0cu116(根据自身设备而定&…

详解JAVA枚举类

目录 1.概述 2.常用API 2.1.清单 2.2.代码示例 2.2.1.ordinal 2.2.2.compareTo 2.2.3.toString 2.2.4.valueOf 2.2.5.values 3.成员变量和带参构造 1.概述 枚举变量指的是变量的取值只在一个有限的集合内,如性别、星期几、颜色等。从JDK5开始&#xff0…

超详细CentOS7 NAT模式(有图形化界面)网络配置

在此附上CentOS7(有可视化界面版)安装教程 超详细VMware CentOS7(有可视化界面版)安装教程 打开VMware—>点击编辑---->选择虚拟网络编辑器 打开虚拟网络编辑器后如下图所示: 从下图中我们看到最下面子网IP为…

软测入门(九)unit test

unit test 核心概念 TestCase:测试用例:用类的方式 组织对一个功能的多项测试Fixture : 夹具,用来固定测试环境TestSuite:测试套件:组织多个TestCaseTestRunner:测试执行:用来执行TestSuit,可以导出测试结果 入门 类需要继承unittest.Tes…

ENVI IDL学习笔记之基本操作

前言ENVI IDL(交互式数据语言)是一个通用的科学计算包,它提供了一套数学函数、数据分析工具,以及一些科学可视化和动画工具。IDL 是 ENVI 图像处理和分析软件的基础,可用于编写脚本并自动执行许多使用 ENVI 图形用户界…

【鲁棒优化】基于联合聚类和定价的鲁棒功率控制方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

12接口扩展无忧,存储显示充电都拉满,ORICO XDR扩展坞上手

扩展坞现在很多朋友都用,一般是配合笔记本使用,有些带有桌面模式的手机、平板装上扩展坞之后,也可以变身全能型的办公设备。现在市面上的扩展坞选择不少,我目前用的是一款功能比较全的12合1扩展坞,来自国产品牌ORICO。…

【机会约束、鲁棒优化】具有排放感知型经济调度中机会约束和鲁棒优化研究【IEEE6节点、IEEE118节点算例】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Django/Vue实现在线考试系统-03-开发环境搭建-MySQL安装

1.概述 MySQL是一种关系型数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库…

Redis的持久化操作

目录 介绍 RDB(redis database) 是什么 备份如何执行 配置 优势 劣势 备份恢复 AOF(Append Only File) 是什么 数据恢复 正常恢复 异常恢复 同步频率设置 重写(压缩) 持久化流程 优势 劣势 总结 介绍 redis持久化操作方式有两种:RDB和AOF。 RDB(redis database) 是…