线性表的基本操作

在粗略学习一遍数据结构之后,压根就没有搞懂其中的逻辑,后来了明白学习数据结构的重要性,打算再利用一大段空闲时间重新拾起数据结构的学习。还站在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)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球