本文是个人笔记,仅用于学习分享,素材来自青岛大学王卓老师的教学视频,如有侵权,请留言作删文处理。
📚 Week02_08_线性表顺序表示和实现3
📚 Week02_08_01 线性表的顺序存储表示
⚠️ 注意:逻辑位序和物理位序相差 1
静态数组定义顺序表
#define MAXSIZE 100
typedef struct
{
ElemType elem[MAXSIZE];
int length;
}SqList;
动态数组定义顺序表
#define MAXSIZE 100
typedef struct
{
ElemType *elem;
int length;
}SqList;
L.elem = (ElemType*)malloc(sizeof(ElemType)*MAXSIZE);
所占字节数:(100 * 单个顺序表数据元素所占字节数) + 4
📚 Week02_08_02 顺序表示意图
📚 Week02_08_03 顺序表基本操作的实现
线性表的基本操作
// 初始化操作,建立一个空的线性表L
InitList(&L);
// 销毁已经存在的线性表L
DestroyList(&L);
// 将线性表清空
ClearList(&L);
// 若线性表为空,返回true;不为空,返回false
IsEmpty(L);
// 返回线性表L的元素个数
ListLength(L);
// 将线性表L中第i个位置元素返回给e
GetElem(L, i, &e);
// 将线性表L中第i个位置插入新元素e
ListInsert(&L, i, e);
// 删除线性表L中第i个位置元素,用e返回
ListDelete(&L, i, &e);
// L中查找与给定e相等的元素
// 若成功,返回该元素在表中的序号,否则返回0
LocateElem(L, e);
操作算法中用到的预定义常量和类型
// 函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
// Status 是函数的类型,其值是函数结果状态代码
typedef int Status;
typedef char ElemType;
【算法02.01】线性表 L 的初始化(传参方式是引用方式)
// 构造一个空的顺序表 L
Status InitList_Sq(SqList &L)
{
// 为顺序表分配空间
L.elem = new ElemType[MAXSIZE];
// 判断存储分配是否成功
if(!L.elem)
exit(OVERFLOW);
// 空表长度置为 0
L.length = 0;
return OK;
}
【算法02.02】销毁线性表 L
void DestroyList(SqList &L)
{
// 释放存储空间
if(L.elem)
delete L.elem;
}
【算法02.03】清空线性表 L
void ClearList(SqList &L)
{
// 将线性表L的长度置为0
L.length = 0;
}
【算法02.04】求线性表 L 的长度
void GetLength(SqList L)
{
return (L.length);
}
❓ SqList L中,为什么不用 SqList &L?
🔖 是因为:
🔖 这里只是读取 L 的长度,不需要改变 L 中元素,所以可以不用引用 &L
【算法02.05】判断线性表 L 是否为空
void ClearList(SqList &L)
{
if(L.length == 0)
return 1;
else
return 0;
}
【算法02.06】顺序表的取值(根据位置 i 获取相应位置数据元素的内容)
int GetElem(SqList L, int i, ElemType &e)
{
// 判断 i 值是否合理,若不合理,返回ERROR
if(i < 1 || i > L.length)
return ERROR;
// 第 i-1 个元素存储着第 i 个数据
e = L.elem[i - 1];
return OK;
}
取值的算法之间复杂度为:O(1)。
线性表获取任意位置元素都可以通过下表获取,这种机制叫做随机存取。
学习笔记最后有微信公众号:惟CPP,欢迎关注,一起交流学习进步~