1. 单链表概念&设计

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

对于链表的每一个结点,我们使用结构体(struct)进行设计,其主要内容有:

其中,DATA数据元素,可以为你想要储存的任何数据格式,可以是数组,可以是int,甚至可以是结构体(这就是传说中的结构体套结构体)

NEXT为一个指针,其代表了一个可以指向的区域,通常是用来指向下一个结点,链表的尾部NEXT指向NULL(空),因为尾部没有任何可以指向的空间了

故,对于一个单链表的结点定义,可以代码描述成://定义结点类型

typedef struct Node {

int data;       //数据类型,你可以把int型的data换成任意数据类型,包括结构体struct等复合类型

struct Node *next;          //单链表的指针域

} Node,*LinkedList;

//Node表示结点的类型,LinkedList表示指向Node结点类型的指针类型

2. 初始化

同任何的结构,类型一样,链表也需要初始化操作,初始化是创建一个单链表的前置节点并向后逐步添加节点,一般来说,我们所谓的初始化单链表一般指的是申请结点的空间,同时对一个结点辅以空值(NULL),其代码可以表示为:LinkedList listinit(){

Node *L;

L=(Node*)malloc(sizeof(Node));      //开辟空间

if(L==NULL){                     //判断是否开辟空间失败,这一步很有必要

printf("申请空间失败");

//exit(0);                  //开辟空间失败可以考虑直接结束程序

}

L->next=NULL;       //指针指向空

}

在这里我们有一个注意点,就是一定要记住判断是否开辟空间失败,虽然在很多试题中以及常用的环境提供的环境非常安全,几乎没有开辟失败的存在,但是也一定要养成判断是否开辟失败并且判断失败后执行代码,但在生产中由于未知的情况造成一旦空间开辟失败任然在继续执行代码,后果将不堪设想,因此养成这样的判断是很有必要的,在C++中可以使用try-catch这样的语句进行优化。

3. 创建单链表(头插入法)

在初始化之后,就可以着手开始创建单链表了,单链表的创建分为头插入法和尾插入法两种,两者并无本质上的不同,都是利用指针指向下一个结点元素的方式进行逐个创建,只不过使用头插入法最终得到的结果是逆序的。

如图,为头插法的创建过程:

该方法从一个空表开始,生成新结点,并将读取到的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后。//单链表的建立1,头插法建立单链表

LinkedList LinkedListCreatH() {

Node *L;

L = (Node *)malloc(sizeof(Node));   //申请头结点空间

L->next = NULL;                      //初始化一个空链表

int x;                         //x为链表数据域中的数据

while(scanf("%d",&x) != EOF) {

Node *p;

p = (Node *)malloc(sizeof(Node));   //申请新的结点

p->data = x;                     //结点数据域赋值

p->next = L->next;     //将结点插入到表头L-->|2|-->|1|-->NULL

L->next = p;

}

return L;

4. 创建单链表(尾插入法)

如图,为尾插入法的创建过程。

头插法建立单链表的算法虽然简单,但生成的链表中结点的次序和输入数据的顺序不一致。若希望两者次序一致,可采用尾插法。

该方法是将新结点逐个插入到当前链表的表尾上,为此必须增加一个尾指针 r, 使其始终指向当前链表的尾结点,否则就无法正确的表达链表。//单链表的建立2,尾插法建立单链表

LinkedList LinkedListCreatT() {

Node *L;

L = (Node *)malloc(sizeof(Node));   //申请头结点空间

L->next = NULL;                  //初始化一个空链表

Node *r;

r = L;                          //r始终指向终端结点,开始时指向头结点

int x;                         //x为链表数据域中的数据

while(scanf("%d",&x) != EOF) {

Node *p;

p = (Node *)malloc(sizeof(Node));   //申请新的结点

p->data = x;                     //结点数据域赋值

r->next = p;            //将结点插入到表头L-->|1|-->|2|-->NULL

r = p;

}

r->next = NULL;

return L;

}

(待续)

数据结构中单链表的存储c语言,单链表一 - 数据结构与算法教程 - C语言网相关推荐

  1. c语言递增20,2020-07-20(C语言)数据结构-在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素...

    //在一个递增有序的线性表中,有数值相同的元素存在.若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素,例如:(7,10,10,21,30,42,42,51,70)将变为(7,10 ...

  2. c语言单链表功能,[数据结构]单链表(C语言)的各种功能

    06-03阅读200,000 + 链表是一种常见的基本数据结构,在此充分利用了结构指针. 链表可以动态存储和分配,即链表是一个功能非常强大的数组. 他可以在节点中定义多种数据类型,并可以根据需要随意添 ...

  3. C语言单链表实现栈(stack)数据结构

    栈 1.栈是限定仅在表尾进行插入和删除操作的线性表.把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom). 2.栈是先进后出(LIFO)结构. 3.栈的插入叫进栈/压栈Push,删 ...

  4. 数据结构上机-尾、头插法建立单链表-单链表遍历C语言完整代码实现

    点击此处跳转视频链接:数据结构上机-尾.头插法建立单链表-单链表遍历C语言完整代码实现

  5. php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...

    /** * * 1. 类LNode用作创建单链表时,生成新的节点. * 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表) * 3. C ...

  6. 数据结构之线性表——链式存储结构之单链表(php代码实现)

    <?php /**** 1. 类LNode用作创建单链表时,生成新的节点.* 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表)* ...

  7. C语言---单链表(详解)---数据结构

    单链表所需要的头文件 重命名类型的意义在于以后还需要用到单链表时,存入的类型不一定时int类型,需要更改类型时,要一个个更改,非常麻烦,我们可以直接在这里修改,更加方便(这里的解释我上一篇也有提到) ...

  8. c语言单链表设计报告,单链表实验报告

    <数据结构>实验报告二 分校: 学号: 日期: 班级: 姓名: 程序名: L2311.CPP 一.上机实验的问题和要求: 单链表的查找.插入与删除.设计算法,实现线性结构上的单链表的产生以 ...

  9. C语言单链表代码实现

    C语言单链表代码实现 一.头文件.常量以及自定义数据结构 #include<stdio.h> #include<malloc.h> #include<stdlib.h&g ...

  10. C语言一趟冒泡交换最小值,C语言单链表冒泡排序为啥以下代码实现不了?

    struct node *sort(struct node *head)/*排序*/ { struct node *p,*q; struct node *temp; for(p=head;p!=NUL ...

最新文章

  1. 前端那点事儿——Tocify自动生成文档目录
  2. pytorch python 交并比 iou
  3. 嵌入式linux sd卡读写,嵌入式Linux之我行——S3C2440上MMC/SD卡驱动实例开发讲解(二)...
  4. 怎么把video文件改成mp4_GiliSoft Video Converter将MP4视频转换成M4V格式教程
  5. 【一步一步学习mysql】数据库操作
  6. 用程序去掉文件和文件夹的只读属性
  7. pandas读取csv文件数据并对数据求和使用matplotlib画饼图
  8. Linux安装Nexus3
  9. 初级办公计算机,初级(计算机办公软件应用)教案
  10. hmcl启动器怎么联机_hmcl启动器使用教程
  11. mappedBy作用
  12. sp-api对接过程详解
  13. VSCode更改显示语言-如更改英语为中文或者将中文改为英语
  14. 移动聚合支付招商,管道收入享长期分润
  15. linux NM 命令使用介绍
  16. 2022/9/11 Python进阶--Linux版 持续更新
  17. Android数据库Cursor异常原因和Fd泄露分析
  18. 原根(知识学习+板子总结+例题+应用)
  19. 机器学习-准确率、召回率、精确率、f1score等
  20. 小甲鱼python猜题_[Python]小甲鱼Python视频第033课(except)课后题及参考解答

热门文章

  1. 对于销售,什么是你应该考虑的最重要事情?
  2. 众所周知的局域网聊天软件
  3. 飞鸽传书2007很给力
  4. 一步步Notepad变Word
  5. 人工智能是未来发展趋势吗 用Python入门怎么样 赶紧看看
  6. 基于Flume的美团日志收集系统-----架构和设计
  7. linux 监听日志_Linux系统取证概述
  8. 突破传统生物3D打印技术局限-王秀杰/Charlie C.L. Wang/刘永进团队合作开发新型生物3D打印体系...
  9. 生信分析和统计作图资源推荐
  10. JAMA子刊:20来岁就要控制体重!分析超8万中国人数据发现,成年到中年体重每多增加10斤,老了之后死亡风险增加10%...