2024/6/4
线性表
结构体
结构体基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的类型。
结构体定义与使用:
语法:
struct 结构体名{
结构体成员列表
};
通过结构体创建变量的三种方式:
struct 结构体名 变量名
struct 结构体名 变量名= {成员1值,成员2值……}
定义结构体时顺便创建变量
结构体变量利用操作符“.”访问成员
线性结构:线性表分为数组和链表
概念:线性表所示最基础的,最常见的一种数据结构。
前驱元素:若A元素在B元素的前面,则称A 为B的前去元素。
后继元素:若B元素在A元素的后面,则称B为A的后继元素。
特征:数据元素之间只有一对一的关系
头结点:第一个数据元素没有前驱
尾结点:最后一个数据元素没有后继
线性表的分类:
线性表分为两种不同的存储数据的方式:顺序表(数组)和链表。
顺序表(数组):
顺序表是以数组的形式进行存储
优点:查询速度快,时间复杂度为O(1)
缺点:插入速度慢,时间复杂度为O(n)
表中元素的个数需要提前定义
下标从0开始
特点:
逻辑地址相邻,物理地址也相邻
顺序表基本操作的功能实现:
1.线性表的静态定义:
#define MaxSize 100;//定义顺序表最大长度
typedef struct{
ElemType data[MaxSize];
int lengh; //当前顺序表的长度
}SqlList;//顺序表的类型定义
2.线性表的静态初始化:
void InitList(SqlList &L){
for(int i=0;i<MaxSize;i++)
L.data[i]=0;//防止“脏数据”
L.lengh=0;
}
3.线性表的插入:
bool ListInsert(SqlList &L,int i,ElemType e){
if(i<1||i>L.length) //判断i值是否合法
return false;
if(L.lengh>L.MaxSize)//判断
return false;
for(int j=L.lengh;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[j-1]=e;
L.lengh++;
return true;
}
4线性表的删除:
bool ListDelete(SqlList &L,int i,Element &e){
if(i<1||i>L.lengh)
return false;
e=L.data[i-1];
for(int j=i;j<L.lengh;j++)
L.data[j-1]=L.data[j];
L.length--;
return true;
}


浙公网安备 33010602011771号