数据结构-线性表

数据结构【线性表】

线性表的逻辑结构

线性表是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;
}

链表

你可能感兴趣的:(数据结构)