数据结构【线性表】
线性表的逻辑结构
线性表是n个数据元素的有限序列。在表中,元素之间存在着线性的逻辑关系:
- 表中有且仅有一个开始结点;有且仅有一个终端结点;
- 除终端结点外,表中的每个结点均只有一个前驱结点; 除终结点之外,每个结点均只有一个后继结点。
顺序表
顺序存储是指在内存中用一块 地址连续 的存储空间按顺序存储线性表的各个数据元素。
采用顺序存储的线性表叫顺序表 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6M9e7wZg-1633783611389)(C:\Users\Onlylove\AppData\Roaming\Typora\typora-user-images\image-20211004194916817.png)]
在高级语言环境中常用一维数组来表述顺序表的数据结构。由于线性表有插入、删除等运算,即表长是可变的。
因此,需要数组的容量需要设计的够大,为了运算方便,用整型变量length来记录当前线性表中数据元素的个数。
线性表的顺序结构可描述如下:
#define Max//线性表可达到的最大长度
typedef struct
{
int elem[Max];
int length;
}SeqList;
定义一个顺序表
SeqList *L;
顺序表的长度为L->length,数据元素是L->elem[1]~L->elem[length],因c语言的数组下标是从0开始的,为了与线性表中的位序一致,可不使用数组下标为0的单元,下标的范围为1<=i<=Max.
1.顺序表的初始化:
void Init_SeqList(SeqList *L)
{
L->length=0;
}
2顺序表的插入
int insert(SeqList *L,int i,int x)
{
int j;
if(L->length==Max-1)
{
printf("表满");
return 1;
}
if(i<1||i>L->length+1)
{
printf("位置错");
return 1;
}
for(j=L->length;j>=i;j--)
L->elem[j+1]=L->elem[j];
L->elem[i]=x;
L->length++;
return 0;
}
3.顺序表的删除
int deleteSeqList(SeqList *L,int i,int*e)
{
int j;
if(i<1||i>L->length)
{
printf("不存在第i个元素");
return 1;
}
*e=L->elem[i]; //存储要删除的元素。
for(j=i;j<=L->length-1;j--)
{
L->elem[j]=L->elem[j+1];
}
L->length--;
return 0;
}