线性表的定义:

线性表中元素关系是一对一的,元素个数是有限的

序列补充:

存在唯一开始元素和终端元素,除此之外,每个元素只有唯一的前驱元素和后继元素

线性表的长度:

线性表中所含元素的个数(n),n=0时表示线性表是一个空表

线性表可以用二元组表示

线性表的抽象数据类型:

线性表的分类: 顺序表,单链表,双链表,循环链表

顺序表:

按照元素的逻辑次序依次储存在一块连续的储存空间里

顺序表中访问任一元素的时间复杂度为O(1),所以顺序表具有随机存取特性

顺序表中逻辑上相邻的元素物理位置必定相邻

顺序表的地址计算:

顺序表类型声明:

采用指针形参:

(1)  访问用  ->

(2)方便顺序表释放算法的设计。节省形参分配的空间

建立顺序表:

修改L,需要传入指针的引用

算法分析:顺序表插入操作平均移动次数为表长一半,与插入位置和表长有关

顺序表应用实例:

(1)空间重用:

用下标k作为新数组的下标,扫描原数组,如果遇到的元素符号新数组中元素的条件 ,则a[k++]=a[i++];

 (2)利用对撞指针实现元素分类:

//模板
int i=begin;
int j=end;
while(i<j)
{while(i<j&&nums[j]不符合交换条件){j--;}while(i<j&&nums[i]不符合交换条件){i++;}swap(nums[i],nums[j]);}

 

链表: 线性表的链式储存结构。每个储存结点包含数据域和指针域。

链表中逻辑上相邻的元素在物理位置上不一定相邻

单链表:每个结点除数据域外设置一个指针域,指向其后继节点

双链表:每个结点除数据域外设置两个指针域,分别指向其前驱结点和后继结点。

头结点:链表的唯一标识

增加头节点的优点:

储存密度:

单链表:

带头节点的单链表示意图

单链表类型:

插入或删除一个结点需要找到其前驱结点

单链表的应用:

链表的拆分:

void split(LinkNode *&l,LinkNode *&l1,LinkNode *&l2)
{
//创建L1,L2头结点
l1=(LinkNode*)malloc(sizeof(LinkNode));
l2=(LinkNode*)malloc(sizeof(LinkNode));
l1->next=NULL;
L2->next=NULL;
//如果l1使用L的头结点,直接令L1=L即可。
LinkNode *p=L->next;
LinkNode *q,*r;
r=l1;
//头插法建表会修改p的next域,需要用q记录p的后继结点
//尾插法用r记录尾结点
while(p!=NULL)
{//尾插法
r->next=p;
r=p;q=p->next;
p->next=l2->next;
l2->next=p;
p=q;//p回到L中}
r->next=NULL;}

双链表的优点:

从任一结点出发,可以快速找到其前驱结点和后继结点

从任一结点出发可以访问其他结点

了解:

1) 任何节点都可以做为头节点。 可以从任何节点开始进行链表的遍历。只要当第一个节点被重复访问时,则意味着遍历结束。

2) 用于实现队列。 如果使用循环链表,则不需要为了队列而维护两个指针(front以及rear)。只需要维护尾节点一个指针即可,因为尾节点的后向节点就是front了。

3) 循环链表常用于各应用程序中。 例如,当运行多个应用程序时,操作系统通常会把这些程序存入至一个链表,并进行循环遍历,给每个应用程序分配一定的时间来执行。此时循环链表对于OS是很有帮助的,当达到链表尾部时,可以方便的从头部重新开始遍历。

有序表:

有序表的归并算法:

【数据结构和算法笔记】c语言实现顺序表和链表相关推荐

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

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

  2. Python数据结构与算法(2.2)——顺序表

    Python数据结构与算法(2.2)--顺序表 0. 学习目标 1. 线性表的顺序存储结构 1.1 顺序表基本概念 1.2 顺序表的优缺点 1.3 动态顺序表 2. 顺序表的实现 2.1 顺序表的初始 ...

  3. 数据结构与算法笔记(三) 线性表(链式描述) 链表

    在链式描述中,线性表元素的位置在内存中是随机的,每个元素都有一个明确的指针指向线性表的下一个元素的位置. 1.单向链表: 数据对象的每一个元素都用一个单元或者节点来描述,每个节点都明确包含另一个相关节 ...

  4. 【数据结构和算法笔记】分别用vector数组和链表实现图的邻接表

     

  5. 【数据结构与算法】五、哈希表和链表

    前言: 大家好,我是春风 今天继续刷左神的算法视频,前面刷完了入门的查找和排序算法,也对排序算法做了一些总结. 现在开始刷结构部分,第一个结构是哈希表,然后是链表.哈希表的应用在Java中有现成的ma ...

  6. C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...

    c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...

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

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

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

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

  9. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

最新文章

  1. 谷歌迈出量子计算开源第一步,推出首个量子机器学习库TensorFlow Quantum
  2. 深度对比Python(Numpy,Scipy)与Matlab的数值精度
  3. 全球及中国塑料包装行业发展方向与应用前景调研报告2022版
  4. tensorflow学习:分布式tensorflow使用,代码实现inGraph方式
  5. 开源纯C#工控网关+组态软件(九)定制Visual Studio
  6. 20145226夏艺华 《Java程序设计》实验报告一
  7. 新开普自助查询 单点登录 php,综合教务管理系统,高校教务管理系统,教务管理系统 - 新开普(NewCapec)...
  8. 对学生朋友的一点建议
  9. VB2010连接 三种数据库 源代码
  10. 在Python27中运行pip install dlib装载库dlib所引起的问题解决
  11. c语言编译器代码及翻译,在线C语言编译器/解释器
  12. 3dmax卸载工具_终极解决方案之 Autodesk系列软件3dmax、maya、cad 安装失败清理删除错误注册表重装...
  13. html倒计时免费代码,JS倒计时代码汇总
  14. linux fdisk等命令,linux命令:fdisk(示例代码)
  15. 将标准的EclipseWTP项目转化成具有Gradle功能的EclipseWTP项目
  16. TDM阅读笔记,在推荐系统的应用
  17. 科比,老大1000天
  18. css布局之版权信息
  19. Python调用百度AI,实现音频转换文字(标准版)
  20. R语言实战读书笔记(八)回归

热门文章

  1. ubuntu8.04自动挂载硬盘分区
  2. [转载]配置路由让MSN可传文件(2003-9-17)
  3. UVA434 Matty‘s Blocks【贪心】
  4. Bailian2744 子串【字符串】
  5. 《程序设计技术》第九章例程
  6. Ubuntu安装MPICH3集群计算环境
  7. [Math Processing Error] 问题的解决(F5刷新页面与 Ctrl/Shift + F5 刷新页面的区别)
  8. 生成式模型(generative) vs 判别式模型(discriminative)
  9. 使用 Java API 操作 HBase
  10. python怎么读发音百度翻译-python selenium 爬取百度翻译单词音标-Go语言中文社区...