持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
前言
最近在刷题的过程中,发现自己的基础数据结构的知识仍不扎实,由此,准备总结并分享数据结构相关知识,希望自己能在总结的同时有所感悟有所发现。
线性表
说到数据结构,第一个要讲的当然是线性表。
线性表的类型定义
L=(a1 ,a2 ,…,an )其中,n是线性表的长度。当n=0时,L是一个空表。
线性表的顺序表示和实现
把逻辑上相邻的元素存储在物理 位置上相邻的存储单元中。
简而言之就是逻辑相邻,物理也相邻
顺序存储在计算机中的存储方式是用一组地址连续的存储单元依次存放线性表的数据元素。
线性表顺序存储结构:
#define LIST_INIT_SIZE 100 //存储空间的初始分配量
#define LISTINCREMENT 10//存储空间的分配增量
Typedef struct{
ElemType *elem; //表基址(用指针*elem表示)
int length; //表长度(表中有多少个元素)
int listsize; //当前分配的表尺寸(字节单位)
}SqList;
动态创建一个空顺序表:
Status InitList_Sq(SqList &L) //创建一个空线性表
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
If(!L.elem) exit(OVERFLOW); //分配失败,结束程序
L.length=0; //暂无元素放入,空表
L.listsize=LIST_INIT_SIZE; //表尺寸=初始分配量
Return OK;
} //InitList_Sq
其中通过malloc()函数新开一片大小为m字节的连续空间,并把该区首址作为函数值。
顺序表插入
实现步骤:
- 将第n到第i个元素依次向后移动一个位置
- 将要插入的元素保存到第i个位置上
- 将表长加一
顺序表删除
实现步骤:
- 将第i+1到第n个元素依次向前移动一个位置
- 将表长减一
顺序表查找
实现步骤:
- 找到下标为需要找的元素
顺序表时间复杂度分析
由上面顺序表插入、删除、查找的步骤分析可以看出顺序表插入删除时间复杂度为O(n),查找为O(1)。