在粗略学习一遍数据结构之后,压根就没有搞懂其中的逻辑,后来了明白学习数据结构的重要性,打算再利用一大段空闲时间重新拾起数据结构的学习。还站在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/
转载文章受原作者版权保护。转载请注明原作者出处!