线性表的基本操作

在粗略学习一遍数据结构之后,压根就没有搞懂其中的逻辑,后来了明白学习数据结构的重要性,打算再利用一大段空闲时间重新拾起数据结构的学习。还站在IT行业门口的我,打算一步一步爬进去,跪着欣赏大佬的笔记和心得。对于数据结构初学者们来说,可能对你们有所帮助,如果有幸得到大佬的指点,也是在下吉人天相啊。

线性表的一些基本操作(同时补充下部分功能实现的逻辑和原理):

代码采用的是C语言和一点C++语法,只展示了功能代码(有部分注释),main()就不再展示。

include

补充:下面的宏定义是操作算法中用到的预定义常量和类型

表示函数结果状态

define TRUE 1

define FALSE 0

define OK 1

define ERROR 0 // 错误

define INFEASIBLE -1 // 不可行

define OVERFLOW -2 // 溢出

typedef int Status; // Status是函数的类型,其值是函数返回结果的类型,此处定义为int型(后面用来返回地址下标)
typedef char ElemType; // 定义线性表中存放数据的类型为 char型

// 构造线性表的存储结构
typedef struct{
ElemType elme[MAXSIZE]; // ElemType上面定义的类型 elem可看做线性表基地址(首地址)
int length; // 存放长度
}SqList; //结构名

// 构造一个空的线性表 -> 初始化线性表 在此实例化了L

Status InitList_Sq(SqList &L)
{
L.elme = new ElemType[MAXSIZE]; // 给L分配内存空间(C++方法)
if(!L.elme) exit(OVERFLOW); // 此处为异常处理,分配成功,L为空表,分配不成功,L非空。OVERFLOW存储分配失败
L.length = 0; // 赋初值,空表长度为0
return OK; // 返回结果 对应该函数体的返回类型Status -> int型
}// InitList_Sq

// 销毁线性表
void DestroyList(SqList &L)
{
if(L.elme) delete L.elme; // C++方法 delete
}//DestroyList

// 将L重置为空表
void ClearList(SqList &L)
{
L.length = 0; // 长度设为0
}//ClearList

// 返回线性表的长度
int GetLength(SqList L)
{
return (L.length); // 取长度参数值
}// GetLength

// 判断线性表是否为空
int IsEmpty(SqList L)
{
if(L.length == 1) return 1;
else return 0; // 取出表长度值进行判断
}//IsEmpty

// 取值
int GetElem(SqList L,int i,ElemType &e)
{
if(i

// 查找
int LocateElem(SqList L,ElemType e)
{
for(i=0;i

// 插入
Status ListInsert_Sq(SqList &L,int i,ElemType e)
{
if(i

// 删除
Ststus ListDelete_Sq(SqList &L,int i)
{
if(i

补充1:

有人可能有疑问了,为什么形参中,有的是&L,而有的是L呢?

&在C++中表示引用,所以&L使用的是引用传参。引用传参是直接把线性表的地址传过去进行操作,可直接修改线性表L的值,在初始化清空、销毁、插入、删除等操作中,都得对L进行修改(即重新赋值、添加删除元素)。在函数没有用到&L(即传参采用L)时,表示我只要线性表L当中的值,我并不需要线性表L为我修改任何值,调用时L是怎样的,返回到main函数就还是什么样的。

那为什么不采用指针而是采用引用方法呢?C语言中的指针,只要是接触过的都知道,指针指来指去的看着容易乱逻辑,且不易阅读、调试难、容错高,所以有更好用、更方便的,为啥不用呢。

补充2:

上述算法中,时间复杂度O(n),空间复杂度O(1)

补充3:

用C语言分配内存

SqList L;

L.elem=(ElemType )malloc(sizeof(ElemType)MAXSIZE);

malloc()分配内存 free()释放内存

用C++分配、释放内存

分配:int L = new int; 或 int L = new int(10)

释放:delete L;

Original: https://www.cnblogs.com/Korch/p/15795775.html
Author: Korch
Title: 线性表的基本操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/584145/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • NTT 快速数论变换

    NTT 先学习FFT由于FFT是使用复数运算,精度并不好,而且也无法取模,所以有了NTT(快速数论变换)。 建议先完全理解FFT后再学习NTT。 原根 NTT使用与单位根性质相似的…

    数据结构和算法 2023年6月7日
    0101
  • 什么是3D建模?

    将所见所想用立体三维的方式通过计算机技术表现出来,这就是3D建模,比如你看到了一个可爱呆萌的卡通人物又或是华丽酷炫的变形金刚,总之就是你认为美好的立体实物 你想将它用计算机技术完美…

    数据结构和算法 2023年6月16日
    0110
  • 「题解报告」P2154 虔诚的墓主人

    在 (n\times m) 一个方格上给你 (w) 个点,求方格里每个点正上下左右各选 (k) 个点的方案数。 (1 \le N, M \le 1,000,000,000,0 \l…

    数据结构和算法 2023年6月8日
    085
  • 使用Vite搭建Vue3+ElementUI-Plus项目过程

    本文主要记录使用Vite搭建一个Vue3+ElementUI-Plus,以及集成Vue Router的过程。本次搭建过程的Nodejs版本为 V16.14.2 创建项目 初始化项目…

    数据结构和算法 2023年6月8日
    087
  • 有序数组中找大于给定值的第一个元素,如果没有返回数组长度+1

    实验证明,查找大于某个值的第一个数 和 查找某个值 都可以用一样的二分法 唯一的区别:找某个值,如果找到了返回mid,找不到返回-1; 找大于某个值的第一个数,无论找没找到都返回l…

    数据结构和算法 2023年6月7日
    0108
  • maxHBLT的合并&初始化&时间复杂度分析

    定义 [extened binary tree] 扩充二叉树是有 external node (用来代替空子树, 也就是 nullptr) 的 binary tree. 对应地, …

    数据结构和算法 2023年6月12日
    071
  • 自己写了个Java RMI(远程方法调用)的实现案例

    自己简单写了个Java RMI(远程方法调用)的实现案例。 为了更好理解RMI(远程方法调用)、序列化的意义等等,花费三天多的时间肝了一个Java RMI的实现案例。 !!!高能预…

    数据结构和算法 2023年6月16日
    0165
  • 并查集

    例题链接 并查集是一个集合操作,将一个集合与另一个集合合并或者查询两个元素是否属于同一个集合。具体操作是先创建一个数组存放各个元素的父亲,初始给每个元素指定父亲是它自己。在合并操作…

    数据结构和算法 2023年6月8日
    080
  • 双向链表

    list简介 双向链表,可以从任何地方快速插入与删除 线性链表结构,数据由若干节点构成,每一个结点都包括一个信息块(实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内…

    数据结构和算法 2023年6月13日
    077
  • 算法:二叉搜索树的最近公共祖先

    问题 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:”对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x…

    数据结构和算法 2023年6月12日
    095
  • 特别浅的浅谈线段树

    Segment_Tree 定义 线段树是一种二叉搜索树,线段树的每个结点都存储了一个区间,也可以理解成一个线段。 用处 维护区间信息。线段树可以在 (O(\log n)) 的时间复…

    数据结构和算法 2023年6月12日
    090
  • java一对一面试指导

    1.什么是冲突 冲突是指当你在提交或者更新代码时被合并的文件与当前文件不一致。读起来有点绕,结合下面的案例理解。 从上面对冲突的定义来看,冲突时发生在同一个文件上的。 2.生产上冲…

    数据结构和算法 2023年6月12日
    076
  • 关于『HTML』:第一弹

    关于『HTML』:第一弹 建议缩放90%食用 根据C2024XSC212童鞋的提问, 我准备写一稿关于『HTML』基础的帖 But! 猛然发现 我的代码居然 不! 符! 合! 标!…

    数据结构和算法 2023年6月8日
    062
  • Codeforces1514B

    问题描述 给你两个数n,k,问可以构造多少n个最大位数为k数按位与为0并且这n个数加起来最大的合法序列,答案对1e9 + 7取模。 思路分析 首先我们考虑这n个数按位与以后为0这个…

    数据结构和算法 2023年6月7日
    080
  • 求最长公共子序列长度

    给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 第一行包含两个整数 N 和 M。 第二行包含一个长度为 N 的…

    数据结构和算法 2023年6月7日
    085
  • 数据结构学习——BST删除特定节点

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据结构和算法 2023年6月12日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球