一、线性链表

参考书:《数据结构(C语言)》–严蔚敏等编著,清华大学出版社。

1、链式存储结构

线性表的链式存储结构特点是用一组任意的存储单元存储线性表的数据元素,与顺序存储结构的区别在于这组存储单元可以是连续的,也可以是不连续的,并且存储方式为顺序存取,顺序结构是随机存取。在优缺点上有以下特点:

优点:
1、节点空间可以动态申请或释放;
2、数据元素按照逻辑次序靠指针指示,插入与删除无需移动大量元素;

缺点:
1、存储密度太小(<1),指针域还需额外的存储空间;

线性链表也可分为有头链表和无头链表:
无头链表如下:

有头链表如下:

在链表中设置头结点的好处

1、便于首元节点的处理:首元节点的地址保存在了头结点的指针域中,所以在链表中的第一位置上的操作和其他位置上的一致,无须进行特殊处理;
2、头结点便于空表和非空表的统一处理,无论链表是否为空,头指针都指向头结点的非空指针;

2、线性链表的建立与插入操作

相关步骤:
在第3个位置之前插入3元素步骤:
(1)查找第i-1的位置,使p指向i-1的位置;

(2)创建q节点,存放e元素(3),将p的next赋给q的next,使p节点连接至3;如下:

(3)再将p的next指向q就可以连成串了;

相关代码:

#include "stdio.h"
#include "stdlib.h"
//#include "LinkList.h"
#define     ERROR   0
#define     OK      1
#define     TRUE    1
#define     FALSE   0
#define     OVERFLOW    -2
#define     MAX_LIST_SIZE 100
#define     LISTINCREMENT 10typedef int Status;
typedef int ElemType;
typedef struct LNode {ElemType data;        //数据域(信息域)struct LNode *next;   //指针域
} LNode, *LinkList;Status CreateList_L(LinkList &L,int n);
//构造有n个元素的有头结点的链表L
Status CreateList_L(LinkList &L,int n) {LinkList p,q;int i;L = (LinkList) malloc (sizeof(LNode));L->next=NULL;q=L;    //起初为L(头)---->NULL for(i=1; i<=n; i++) {p = (LinkList) malloc (sizeof(LNode));   //定义p节点存储值//scanf("%d",p->data); p->data=i;    //将i值赋值给pq->next=p; //q的next指向pp->next=NULL;    //p的next指向NULLq=q->next;    //q后移}return OK;
}Status ListInsert_L(LinkList &L,int i,ElemType e);
//在链表的第i个位置之前插入元素e的值
Status ListInsert_L(LinkList &L,int i,ElemType e) {LinkList p,q;p=L;int j=0;  //建立一个j变量,后面需要使用判断合法性while(p && j<i-1) {  //定位到i-1的位置p = p->next; //p后移直到指向i-1的位置++j;}if(!p || j>i-1) return ERROR;  //表明i的值小于1或者大于表长+1q = (LinkList) malloc (sizeof(LNode));  //生成新节点qq->data=e;q->next=p->next;   //p的next给q的nextp->next=q;   //将p的next指向q,连成一串return OK;
}Status ListDisPlay_L(LNode *L);
//打印链表
Status ListDisPlay_L(LNode *L) {LNode *p;p=L->next; //p指向头结点if(p == NULL) exit(OVERFLOW);else {while(p != NULL) {if(p->next != NULL)printf("%d,",p->data);else{printf("%d",p->data);}p=p->next;    //p指针后移}}
}int main(void) {LinkList L;CreateList_L(L,5);  //这里为了测试,采用1,2,3,4,5的链表,可根据自身而定int i,e;   //插入位置及元素scanf("%d %d",&i,&e);if(ListInsert_L(L,i,e))ListDisPlay_L(L);elseprintf("插入位置非法\n");return 0;
}/*
使用单链表存储结构,实现顺序表的插入操作,给出插入位置,
输出插入后线性表的元素。如果插入位置不合法则输出:
插入位置非法。
初始化线性表为:1,2,3,4,5
如:
输入:3 3  输出:1,2,3,3,4,5
输入:-4 3 输出:插入位置非法
*/

实现:
初始链表: 1,2,3,4,5
插入:3 3

插入:-1 2

线性链表的建立与插入-----数据结构与算法笔记相关推荐

  1. #数据结构:编写不带头结点单链表的建立、插入和删除算法

    编写不带头结点单链表的建立.插入和删除操作算法. 一.问题描述 编写一个不带头节点的单链表 二.基本要求 1) 建立 2) 插入 3) 删除 三.算法思想 选用不带头结点的单链表,在第一个元素节点前插 ...

  2. 明翰数据结构与算法笔记V0.8(持续更新)

    文章目录 前言 数据结构 `线性表` `数组` `链表` `栈与队列` [串/字符串] 树 并查集 `二叉树` [二叉排序树/二叉搜索树] `红黑树` 红黑树操作 霍夫曼树 `堆` [大/小]根堆 可 ...

  3. 数据结构与算法笔记(十五)—— 散列(哈希表)

    一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...

  4. 数据结构与算法笔记(青岛大学王卓老师视频)

    写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...

  5. 数据结构与算法笔记 - 绪论

    数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...

  6. JS数据结构与算法 笔记

    JS数据结构与算法笔记 前言:不定时更新说明 1. 栈(Stack) 1.1 基于数组实现栈 1.2 基于对象实现栈 1.3 基于链表实现栈 1.4 栈的简单应用 1.4.1 字符串中的括号匹配问题 ...

  7. 数据结构与算法笔记(王卓网课+教材+大话数据结构)

    数据结构与算法笔记(王卓网课+教材+大话数据结构) ##最新整理!!! 顺序存储结构的线性表P10-P21 顺序线性表的代码实现 链式线性表笔记 串笔记 绪论.算法(P1-P9)1.4数据起源结构 数 ...

  8. 数据结构与算法笔记(十六)—— 二叉搜索树

    一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...

  9. 数据结构与算法笔记(二)—— 顺序表

    一.顺序表的形式 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等.一组数据中包含的元素个数可能发生变化(可以增加或删除元 ...

  10. 数据结构与算法笔记总结

    学习资源推荐: 1.程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦 程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦_v_JULY_v的博客-CSDN博客 2.推荐!数据结构 ...

最新文章

  1. 使用 sched_setaffinity 将线程绑到CPU核上运行
  2. (转载)conflicting types for xx各种错误的总结
  3. php strtotime 和 date 日期操作
  4. spring boot整合WebSocket示例
  5. VTK:BSP树时序用法实战
  6. WPF程序模彷Windows7的桌面任务栏
  7. tidb 架构 ~Tidb学习系列(5)
  8. 从金蝶k3到金税盘_金蝶k3怎样结转主营业务成本
  9. mysql 15位升18位_身份证号码15位升18位规则
  10. 基于51单片机的多点8路温度采集系统 proteus仿真程序原理图设计
  11. 2022-04-24 表单设计器动态插入脚本【低代码平台】
  12. gentoo mysql_gentoo
  13. MMS-MTK-Obigo03c
  14. uniapp 自制头部左侧胶囊组件
  15. 4412 SPI驱动
  16. python 选手比赛模拟
  17. 【QQ登录------第三方登录的实现流程】
  18. Go并发模型:流水线与取消(Pipelines and cancellation译文)
  19. 千兆以太网和快速以太网有什么区别?
  20. 华为三层交换机 配置

热门文章

  1. CubeMX编写风力摆控制系统[HAL库]
  2. android5.0电话录音,用Xpose完美实现电话录音,支持android 8.1.0
  3. 使用html查看dicom,LEADTOOLS构建HTML5 DICOM/PACS查看器(二)
  4. 用python算24点及原理详解
  5. 公众号开发:实现一键复制功能
  6. Kindle 文言文 古汉语 字典
  7. css与javascript小案例,使用css3和javascript开发web拾色器实例代码
  8. jemalloc 编译
  9. mysql 数据库建模工具 mysqlworkbench
  10. RSA加密算法中的数学原理