线性表

结构体

结构体基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的类型。

结构体定义与使用:

语法:

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;
}

 

posted @ 2023-12-17 16:04  艾鑫4646  阅读(7)  评论(0编辑  收藏  举报