返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ 数据结构中单链表的示例分析
  • 383
分享到

C++ 数据结构中单链表的示例分析

2023-06-29 16:06:28 383人浏览 泡泡鱼
摘要

小编给大家分享一下c++ 数据结构中单链表的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、链表是什么链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接依次实现的

小编给大家分享一下c++ 数据结构中单链表的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

一、链表是什么

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接依次实现的。

C++ 数据结构中单链表的示例分析

  • 由图,链式结构在逻辑上是连续的,但是物理上不一定连续

  • 显示中结点一般是从堆上申请出来的

  • 从堆上申请的空间,是按照一定的策略划分的,两次申请的空间,可能连续,可能不连续,见顺序表

C++ 数据结构中单链表的示例分析

链表的分类

链表也可以分为很多种

单向或者双向
2. 带头或者不带头
3. 循环或非循环

C++ 数据结构中单链表的示例分析

C++ 数据结构中单链表的示例分析

C++ 数据结构中单链表的示例分析

我们最常用的还是无头单向非循环链表和带头双向循环链表 本篇我们实现无头单向非循环链表增删查改

二、链表的实现

基本结点结构

typedef int SLTDateType;typedef struct SListnode{SLTDateType data;struct SListNode* next;}SListNode;

头文件

//llist.h#pragma once#include <stdio.h>#include <assert.h>#include <stdlib.h>#include <string.h>typedef int SLTDateType;typedef struct SListNode{SLTDateType data;struct SListNode* next;}SListNode;// 动态申请一个节点SListNode* BuySListNode(SLTDateType x);// 单链表打印void SListPrint(SListNode* plist);// 单链表尾插void SListPushBack(SListNode** pplist, SLTDateType x);// 单链表的头插void SListPushFront(SListNode** pplist, SLTDateType x);// 单链表的尾删void SListPopBack(SListNode** pplist);// 单链表头删void SListPopFront(SListNode** pplist);// 单链表查找SListNode* SListFind(SListNode* plist, SLTDateType x);// 单链表在pos位置之后插入x// 分析思考为什么不在pos位置之前插入?void SListInsertAfter(SListNode* pos, SLTDateType x);// 单链表删除pos位置之后的值// 分析思考为什么不删除pos位置?void SListEraseAfter(SListNode* pos);// 单链表的销毁void SListDestory(SListNode* plist);

动态申请一个节点

C++ 数据结构中单链表的示例分析

// 动态申请一个节点SListNode* BuySListNode(SLTDateType x){SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));if (newnode == NULL)//申请失败{printf("malloc fail\n");exit(-1);}else{newnode->data = x;newnode->next = NULL;}return newnode;}

单链表打印

链表单个结点中,data存储数据,next存储下一个结点的地址,可以通过next访问下一个结点

C++ 数据结构中单链表的示例分析

C++ 数据结构中单链表的示例分析

// 单链表打印void SListPrint(SListNode* plist){SListNode* cur = plist;while (cur != NULL){printf("%d->", cur->data);cur = cur->next;//访问下一个结点}printf("NULL\n");}

单链表尾插

C++ 数据结构中单链表的示例分析

这里传入了头结点的地址的指针,是因为有可能要改变头结点的情况,传址调用幻术,如果只传入*plist,相当于只改变形参,实参不会有实际改变,通过pplist可以解决这个问题

C++ 数据结构中单链表的示例分析

// 单链表尾插void SListPushBack(SListNode** pplist, SLTDateType x){SListNode* newnode = BuySListNode(x);if (*pplist == NULL)//空链表{*pplist = newnode;}else{SListNode* tail = *pplist;//遍历至最后插入while (tail->next != NULL){tail = tail->next;}tail->next = newnode;}}

单链表的尾删

一前一后遍历,找到空后直接free(tail),将prev->next置空即可

C++ 数据结构中单链表的示例分析

// 单链表的尾删void SListPopBack(SListNode** pplist){assert(pplist);if (*pplist == NULL)//空链表,无需删除{return;}else{SListNode* prev = NULL;SListNode* tail = *pplist;{while (tail->next != NULL){prev = tail;tail = tail->next;}free(tail);tail = NULL;prev->next = NULL;}}}

单链表的头插

C++ 数据结构中单链表的示例分析

有点绕,要多想想

// 单链表的头插void SListPushFront(SListNode** pplist, SLTDateType x){assert(pplist);SListNode* newnode = BuySListNode(x);newnode->next = *pplist;*pplist = newnode;}

单链表头删

C++ 数据结构中单链表的示例分析

比较简单

// 单链表头删void SListPopFront(SListNode** pplist){assert(pplist);if (*pplist == NULL)//链表为空{return;}else{SListNode* next = (*pplist)->next;free(*pplist);*pplist = next;}}
// 单链表查找遍历即可SListNode* SListFind(SListNode* plist, SLTDateType x){SListNode* cur = plist;while (cur != NULL){if (cur->data = x){return cur;}cur = cur->next;}retuen NULL;}

*单链表在pos位置之后插入x

为什么不在pos之前插入,由于我们是单向链表,需要从头遍历查找pos,如果在pos之前插入,找到pos还需找到pos之前的地址,对所传参数不友好,所以我们一般在后插入

C++ 数据结构中单链表的示例分析

//单链表在pos位置之后插入xvoid SListInsertAfter(SListNode* pos, SLTDateType x){assert(pos);SListNode* newnode = BuySListNode(x);newnode->next = pos->next;pos->next = newnode;}

单链表删除pos位置之后的值 为什么不删除pos位置,同上,在逻辑上和传参不友好.

C++ 数据结构中单链表的示例分析

// 单链表删除pos位置之后的值void SListEraseAfter(SListNode* pos){assert(pos);SListNode* next = pos->next;if (next){pos->next = next->next;free(next);next = NULL;}}

单链表的销毁 链表不像顺序表连续删头就可以,由于链表是一个一个分散的结点,需要逐一删除

C++ 数据结构中单链表的示例分析

// 单链表的销毁void SListDestory(SListNode** pplist){assert(*pplist);SListNode* cur = *pplist;while (cur){SListNode* next = cur->next;free(cur);cur = next;}*pplist = NULL;}

看完了这篇文章,相信你对“C++ 数据结构中单链表的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网其他教程频道,感谢各位的阅读!

--结束END--

本文标题: C++ 数据结构中单链表的示例分析

本文链接: https://lsjlt.com/news/325669.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++ 数据结构中单链表的示例分析
    小编给大家分享一下C++ 数据结构中单链表的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、链表是什么链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接依次实现的...
    99+
    2023-06-29
  • JavaScript数据结构之单链表和循环链表的示例分析
    这篇文章将为大家详细讲解有关JavaScript数据结构之单链表和循环链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。链表是一种物理存储单元上非线性、非连续性...
    99+
    2024-04-02
  • JavaScript数据结构之链表的示例分析
    这篇文章主要为大家展示了“JavaScript数据结构之链表的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript数据结构之链表的示例分析...
    99+
    2024-04-02
  • Java数据结构之链表的示例分析
    小编给大家分享一下Java数据结构之链表的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、链表的介绍什么是链表链表是一种物理存储单元上非连续、非顺序的存...
    99+
    2023-06-15
  • Python数据结构之旋转链表的示例分析
    这篇文章主要为大家展示了“Python数据结构之旋转链表的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python数据结构之旋转链表的示例分析”这篇文章吧。示例图题目描述:给定一个链表...
    99+
    2023-06-17
  • C++数据结构之单链表
    目录单链表结构的定义单链表打印动态申请一个结点单链表尾插单链表尾删单链表头插单链表头删求单链表长度单链表查找单链表在pos位置插入单链表在pos后面位置插入单链表删除pos位置单链表...
    99+
    2024-04-02
  • C++数据结构中list的示例分析
    小编给大家分享一下C++数据结构中list的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言list相较于vector来说会显得复杂,它的好处是在任意位置插入,删除都是一个O(1)的时间复杂度。一、list的节点...
    99+
    2023-06-25
  • C语言中单链表的示例分析
    这篇文章将为大家详细讲解有关C语言中单链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、思路步骤1. 定义结构体a.数据域:用来存放数据b.指针域:用来存放下一个数据的位置2.初始化申请头结...
    99+
    2023-06-25
  • Java数据结构和算法之链表的示例分析
    这篇文章主要介绍Java数据结构和算法之链表的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、链表(Linked List)链表通常由一连串节点组成,每个节点包含任意的实例数据(data fiel...
    99+
    2023-06-28
  • C语言数据结构之单向链表详解分析
    链表的概念:链表是一种动态存储分布的数据结构,由若干个同一结构类型的结点依次串连而成。 链表分为单向链表和双向链表。 链表变量一般用指针head表示,用来存放链表首结点的地址。 每个...
    99+
    2024-04-02
  • C++数据结构之单链表的实现
    目录一、单链表的定义二、单链表的基本操作的实现1.初始化2.取值3.查找4.插入5.删除三、完整代码四、测试一下代码一、单链表的定义 线性表的链式存储又称为单链表,它是指通过一组任意...
    99+
    2024-04-02
  • JavaScript数据结构之双向链表和双向循环链表的示例分析
    这篇文章主要为大家展示了“JavaScript数据结构之双向链表和双向循环链表的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript数据结...
    99+
    2024-04-02
  • Java中数据结构的示例分析
    这篇文章将为大家详细讲解有关Java中数据结构的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.1.1.       增量内存分配 ArrayList 、 Hash...
    99+
    2023-06-03
  • C++数据结构红黑树的示例分析
    这篇文章给大家分享的是有关C++数据结构红黑树的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概念和性质红黑树的概念: 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或...
    99+
    2023-06-29
  • C++数据结构链表基本操作示例过程
    目录首先创建好一个节点其次创建一个统计节点属性增加节点用表头插入的方法插入节点删除节点首先创建好一个节点 typedef struct node { int date; s...
    99+
    2024-04-02
  • C语言数据结构实例讲解单链表的实现
    目录1、单链表2、单链表的实现头文件函数的实现(1)打印链表(2)动态申请结点(3)尾插(4)头插(5)尾删(6)头删(7)查找(8)在pos之前插入(9)删除pos(10)在pos...
    99+
    2024-04-02
  • linux中mysqldump导出数据库、数据、表结构的示例分析
    这篇文章主要为大家展示了“linux中mysqldump导出数据库、数据、表结构的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中mysqldump导出数据库、数据、表结构的示...
    99+
    2023-06-09
  • JavaScript数据结构中串的示例分析
    这篇文章将为大家详细讲解有关JavaScript数据结构中串的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:类似于线性表的顺序存储结构,用一组地址连续的...
    99+
    2024-04-02
  • Java数据结构中图的示例分析
    这篇文章给大家分享的是有关Java数据结构中图的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。有向图有向图的定义及相关术语定义∶ 有向图是一副具有方向性的图,是由一组顶点和一组有方向的边组成的,每条方向的...
    99+
    2023-06-29
  • C语言数据结构之单链表的实现
    目录一.为什么使用链表二.链表的概念三.链表的实现3.1 创建链表前须知3.2 定义结构体3.3 申请一个节点3.4 链表的头插3.5 链表的尾插3.6 链表的尾删3.7 链表的头删...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作