单链表的使用方法.数据结构(三)[上]

news2024/11/20 10:22:49

前言

提示:文本为数据解构(三)单链表:

本文具体讲解单链表的具体使用方法


提示:以下是本篇文

系列文章目录

第一章 数据解构(一)

第二章 顺序表的具体使用方法.数据解构(二)


文章目录

前言

系列文章目录

文章目录

一、单链表视图

二、单链表使用方式

1.定义一个结构体

2.初始化

3.扩容

4.尾插

5.尾减

 方法一(笨方法):

方法二:

三.总结

6.头加

7.头减

8.打印


提示:以下是本篇文章正文内容,下面案例可供参考

回顾上文说到

顺序表的使用方法

由于顺序表的缺点:

  1. 空间不够,需要扩容,扩容后有的扩容空间用不到,浪费空间.
  2. 插入数据或移动数据,删除数据都会有消耗.

所有有了单链表

单链表的优势:

  1. 按需来扩容,不多不少刚刚好,不用就释放,合理使用空间.
  2. 从头插入数据不需要挪动数据,美滋滋(不浪费空间).

单链表的缺点:

  1. 每一个数据都需要用指针去访问每一个节点.
  2. 不支持“点名访问”就像数组访问一样访问下标.

一、单链表视图

图片如下(示例):

 

二、单链表使用方式

1.定义一个结构体

代码如下(示例):

#include <stdio.h>
#include <stdlib.h>
typedef int SLDataType;//SLDataType
typedef struct Link_List
{
	SLDataType data;//存储值
    struct List* next;//存储下一个地址
}List;

SLDataType data;//存储值
    struct List* next;//存储下一个地址

2.初始化

代码如下(示例):

List* str=NULL;

为一个空,主要目的为在极端可能的情况,如:头插,尾插时没有节点.

3.扩容

增容的目的是为了在输入数据时有可用空间,不多不少刚刚好

 代码如下(示例):

//增容
List* SListAdd(SLDataType x)
{
	List* newlist = (List*)malloc(sizeof(List));
	if (newlist == NULL)
	{
        //增容失败直接返回
		return;
	}
	newlist->data = x;
	newlist->next = NULL;
	return newlist;
}

4.尾插

 代码如下(示例):

//尾插
void SListPushBack(List** pplist, SLDataType x)
{
	//增加可以模块化
	/*List* newlist = (List*)malloc(sizeof(List));
	newlist->data = x;
	newlist->next = NULL;*/
	List* newlist = SListAdd(x);//创建一个新的节点
	if (*pplist==NULL)//判断是否有节点
	{
		//没有就把newlist给pplist
		*pplist = newlist;
	}
	else
	{
		//有,就找尾(null)
		List* tali = *pplist;//把pplist的地址给tali
		while (tali->next!=NULL)
		{
			tali = tali->next;
		}
		//把newlist的地址给尾巴
		tali->next = newlist;
	}
}

5.尾减

 代码如下(示例):

 方法一(笨方法):

//尾删
void SLPopback(List** pplist)
{
	if (*pplist == NULL)
	{
		return;
	}
    //判断是否只有一个节点
	if ((*pplist)->next==NULL)
	{
        //如果是直接释放
		free(*pplist);
		*pplist = NULL;
	}
	else
	{
		List* Front = *pplist;//保存倒数第2个的
		List* hate = *pplist;//不断增加的
		while (hate->next !=NULL)
		{
			hate = hate->next;
			if (hate->next == NULL)
			{
				Front->next = NULL;
				break;
			}
			if (hate->next != NULL)
			{
				Front = hate;
			}
		}
		free(hate);
		hate = NULL;
	}
}

方法二:

//尾删
void SLPopback(List** pplist)
{
	if (*pplist == NULL)
	{
		return;
	}
	if ((*pplist)->next==NULL)
	{
		free(*pplist);
		*pplist = NULL;
	}
	else
	{
		List* Prev = *pplist;//保存倒数第2个的
		List* tail = *pplist;//不断增加的
		while (tail->next !=NULL)
		{
			
			Prev = tail;
			tail = tail->next;
		}
		free(tail);
		tail = NULL;
		Prev->next = NULL;
	}
}

三.总结

其实方放逻辑是一样的:

如图:

6.头加

思路:(修改一下是2值的地址1

 

 代码如下(示例):

//头插
void SLPoshFront(List** pplist, SLDataType x)
{
	List* newList = SListAdd(x);
	newList->next = *pplist;
	*pplist = newList;
}

7.头减

 代码如下(示例):

//头删
void SLPopFront(List** pplist)
{
	if (*pplist==NULL)
	{
		return;
	}
	else
	{
		List* newlist=*pplist;
        free(*pplist);
		*pplist = newlist->next;
	}
}

8.打印

 代码如下(示例):

//打印
void SLPrintf(List* plist)
{
	List* LSfirst = plist;
	while (LSfirst!=NULL)//判断是否有下一个节点
	{
		printf("%d", LSfirst->data);//打印当前节点的值
		LSfirst = LSfirst->next;//寻找下一个节点
	}
	printf("\n");
}

 while (LSfirst!=NULL)//判断是否有下一个节点
    {
        printf("%d", LSfirst->data);//打印当前节点的值
        LSfirst = LSfirst->next;//寻找下一个节点
    }

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

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

相关文章

JavaWeb—Tomcat服务器

1 tomcat概述及基本使用 概述 tomcat是apache软件基金会的jakatai项目组的一个核心项目&#xff0c;由apache、sun和其他一些公司及个 人共同开发而成。由于有了sun公司的参与和支持&#xff0c;最新的servlet、jsp规范总是能在tomcat中得到 体现。因为tomcat技术先进、性能稳定…

git搭建远程仓库

前言&#xff1a;我们现在搭建远程仓库&#xff0c;常见的&#xff0c;是去github、gitlab、gitee等这类第三方平台网站上进行部署。咱就顺道说说这三个的区别。 github 是面向全世界的&#xff0c;由国外开发的&#xff0c;基本上放在上面都是开源的&#xff0c;私人仓库好像…

助力工业物联网,工业大数据之脚本开发【五】

01&#xff1a;脚本开发思路目标&#xff1a;实现自动化脚本开发的设计思路分析路径step1&#xff1a;脚本目标step2&#xff1a;实现流程step3&#xff1a;脚本选型step4&#xff1a;单个测试实施创建一个文件&#xff0c;存放要采集的表的名称#创建测试目录 mkdir -p /opt/da…

【苹果推iMessage】软件安装UIAPplicationSharedApplicationiMessage

推荐内容IMESSGAE相关 作者✈️IMEAX推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容3.日历推 *** …

CANoe-Macro Recorder(宏模块)

1、引子 初接触宏模块时,我还记得当时我主要的测试内容是RVC/OPS(倒车影像/雷达)和Climate(空调)。当时的测试手法是通过CANoe上的面板,模拟RVC/OPS/Climate ECU发送CAN总线消息给IVI(中控,娱乐音响系统),实现RVC/OPS/Climate功能在IVI上的显示与控制 例如模拟激活…

webpack DefinePlugin解析

DefinePlugin是webpack的一个官方内置插件&#xff0c;它允许在 编译时 将你代码中的变量替换为其他值或表达式。这在需要根据开发模式与生产模式进行不同的操作时&#xff0c;非常有用。例如&#xff0c;如果想在开发构建中进行日志记录&#xff0c;而不在生产构建中进行&…

1603_MIT 6.828 “El Torito” Bootable CD-ROM Format Specification阅读

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 最近正好趁着假期看了下MIT的OS课程&#xff0c;这是里面推荐阅读的一份资料。简单看了一下&#xff0c;整理一下自己的阅读笔记。 只要是涉及到有历史的计算机技术…

一文带你深刻的进入python,并且了解python的优缺点

嗯&#xff0c;你好&#xff0c;感谢您能打开我的文章&#xff0c;在这里我有一个好消息来告诉大家呢&#xff0c;那就是&#xff1a;还有350多天就要过年啦&#xff0c;哈哈哈哈&#xff0c;开不开心&#xff0c;兴不兴奋 名字&#xff1a;阿玥的小东东 学习&#xff1a;pytho…

零代码应用搭建规范建议

文/顿唯 况育军 贺书钿 编辑/杜逸敏 在明道云零代码开发平台里&#xff0c;一个完整的业务应用包含了工作表、视图、角色、自定义页面、工作流五大核心模块&#xff08;统计和外部门户为可选模块功能&#xff09;&#xff0c;基于这些能力模块组件&#xff0c;我们能呈现给用…

飞桨时序建模库PaddleTS及产业应用实践

时间序列&#xff1a; 一种普遍存在的数据形态 众所周知&#xff0c;时间序列是一种普遍存在的数据形态&#xff0c;与我们的日常生活及生产活动密切相关。如&#xff1a;股票指数、原油价格等金融市场数据&#xff1b;温度、湿度等天气数据&#xff1b;振动、转速等工业设备运…

【技术短文】汽车软件质量改善

一、根因分析 根据汽车软件脆弱性主要因素分析&#xff0c;共有10余种因素会导致软件质量问题&#xff1a; 1.项目时间点压力&#xff0c;占比 71&#xff05;2.缺乏安全编程理解/培训&#xff0c;占比 60&#xff05;3.偶然编程错误&#xff0c;占比 55&#xff05;4.缺乏质量…

Tarjan算法的应用---缩点与割点

图论中有时候会涉及到一些连通性问题&#xff0c;主要是针对于点来说&#xff0c;在有向图中有时候需要计算强连通分量&#xff0c;这时候代表分量的的点就非常重要&#xff1b;在无向图中有时候会需要知道割点&#xff0c;用到的算法都是Tarjan&#xff0c;这个算法还是有难理…

了解多线程与并发

文章目录前言继承Thread类实现Runnable接口实现Callable和Future接口线程生命周期线程优先级线程加入操作线程休眠操作中断线程线程安全问题线程同步机制1. 同步代码块2. 同步方法线程暂停与恢复知识拓展死锁前言 &#x1f4cb;前言&#x1f4cb; &#x1f49d;博客&#xff1a…

用Devc++与easyx一步一步做游戏[启动界面部分]-之按钮制作

前面我们介绍了如何为dev c配置好easyx&#xff0c;至于用easyx能够做一些什么呢&#xff1f;大用处我不敢说&#xff0c;用来学习了解消息机制还是不错的。这我们来实现一个简单的游戏启动界面的设计&#xff0c;主要是按钮的设计。总体设计好的效果如下&#xff1a; GIF截图…

(免费分享)springboot音乐网站

开发工具&#xff1a;eclipse&#xff0c;数据库mysql5.7 jdk1.8技术&#xff1a;springbootmybatis/** * * * */package com.bjpowernode.music.ss.service.impl;import javax.annotation.Resource;import com.bjpowernode.music.common.AbstractService; import com.bjpowe…

基于 ROS 机器人和 RTAB-MAP 算法实现室内三维重建

本文叙如何利用RTAB-Map算法和Turtlebot3机器人在自己构建的室内场景中建图 文章目录1、安装依赖2、创建工作空间3、安装rtabmap和rtabmap_ros4、建立gazebo场景功能包5、建立机器人功能包6、为机器人添加kinect相机参考7、编译工作空间8、建立环境地图9、建图1、安装依赖 必要…

数据结构第五周 :(进制转换问题 + 迷宫自动行走问题 + 杨辉三角形 + 队列元素逆置 + 银行排队 + 整数划分问题 + 卡特兰数)

目录进制转换问题迷宫自动行走问题杨辉三角形队列元素逆置银行排队——队列整数划分问题买票问题——卡特兰数小兔的棋盘——卡特兰数进制转换问题 【问题描述】根据课堂讲授&#xff0c;请用“顺序栈”解决进制转换问题&#xff0c;不采用顺序栈&#xff0c;不给分。 【输入形…

前端屏幕录制工具 + 录制<video>标签内容

一、录制的实现思路 1.开始录制、停止录制、下载视频 2.Blob介绍 3.概念 var mediaRecord //用于录制视频 var mediaStream //视频流 var videoBuffer [] //保存的视频数据二、屏幕录制工具 下载地址&#xff1a; https://chrome.google.com/webstore/detail/tampermonkey…

Linux- 系统随你玩之--文本处理三剑客--grep继任者awk

文章目录1、sed概述1.1、 与vim等编辑器的区别&#xff1a;1.2、sed工作原理1.3 、sed数据处理原理1.4 、正则表达式概念2、 sed语法和常用选项2.1、语法&#xff1a;2.2、sed常用内部命令2.3、参数&#xff1a;3、 sed 正则表达式&#xff08;定位&#xff09;3.1 、数字定址…

管理机密(RH294)

在ansible中有一个命令行工具ansible-vault可用于创建 编辑 加密 解密 查看文件举个栗子ansible-vaultcreate filenameNew Vault password&#xff1a; #输入密码Confirm New Vault password&#xff1a; #确认密码也可以使用别的方法 比如创建一个密码文件ansible-vaultcreate…