青岛大学_王卓老师【数据结构与算法】Week02_08_线性表顺序表示和实现3_学习笔记

本文介绍了线性表的顺序存储结构,包括静态和动态数组实现,并详细讲解了顺序表的基本操作如初始化、销毁、清空、获取长度、判断为空、取值、插入和删除等。同时,强调了随机存取的特性及其效率。文中还给出了相应的C语言实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是个人笔记,仅用于学习分享,素材来自青岛大学王卓老师的教学视频,如有侵权,请留言作删文处理。

王卓老师 数据结构与算法第 02 周第 08 个原视频链接

📚 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,欢迎关注,一起交流学习进步~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值