1、线性表(List)

顺序表及链表

一、线性表的抽象数据类型描述

类型名:线性表(List) 数据对象集:线性表示n(>=0)个元素构成的有序序列(a1,a2,……,an) 操作集:线性表L∈List, 整数i表示位置,元素X∈ElementType

二、顺序表

1.定义

struct LNode {
    ElementType Data[MAXSIZE];//存了一个数组,其最多能存MAXSIZE个元素
    int Last;//最后一个元素的下标!
};
typedef struct LNode *List;

访问下标为i的元素:L.Data[i]或PtrL->Data[i] 线性表的长度: L.Last+1 或 PtrL->Last+1;

2.操作

其基本操作有

1.List MakeEmpty();//初始化一个空线性表 2.ElementType FindKth(int K, List Ptrl);//返回下标为K的相应元素 3.int Find(ElementType X, List Ptrl);//在线性表L中查找X的第一次出现位置 4.void Insert(ElementType X, int i, List Ptrl);//在位序i前插入一个新元素X 5.void Delete(int i, List Ptrl);//删除指定位序i的元素 6.int Length(List Ptrl);//返回线性表的长度n**

下面我们来一一过一遍

(1)创建空表

(2)查找下标为K的元素

返回下标K的相应元素。

(3)查找元素X

返回下标,未找到返回-1。

(4)插入

在第i(1 ≤ i ≤ n+1)个位置上插入一个值为X的新元素

(5)删除

删除第i个元素(下标为i-1)

(6)返回线性表的长度n

删除第i个元素(下标为i-1)

3.完整代码演示

输出结果为:

该顺序表长度为:10 第5个元素为:4 --删除第4个元素-- 删除后第5个元素为:5 表中是否有元素3(有则显示其下标无则显示-1):-1 表中是否有元素5(有则显示其下标无则显示-1):4

三、线性表的链式存储

重要!!链表即不要求逻辑上相邻的两个元素物理上也相邻,通过"链"建立起数据元素之间的逻辑关系。 其插入和删除不需要移动数据元素,只需要修改链。

1.定义

2.操作

其基本操作有

1.List Insert(ElementType X, int i, List PtrL) ;//插入(在第i-1(1<=i<=n+1)个结点后插入一个值为X的新结点) 2.List FindKth(int K, List PtrL) ;//按序号查找查找 查找链表中第K个元素 List Find(ElementType X, List PtrL) ; //按值查找: 查找元素K 3.List Delete(int i, List PtrL);//删除操作(删除链表第i个位置上的结点) 4.int Length(List PtrL)//求表长

(1)插入操作

在第i-1(1 ≤ i ≤ n+1)个结点后插入一个值为X的新结点 (1)先构造一个新结点,用s指向 //malloc分配空间 将s的数据Data赋值为X (2)再找到链表的第i-1个结点,用p指向 (3)然后修改指针,插入结点(p之后插入新结点是s) // 先将p原先的指向next给s的next指针,再将p的next指针指向s

(2)查找

找到则返回指向该结点的指针,找不到返回NULL

1.按值查找:Find

按值查找: 查找元素K

2.按序号查找:FindKth

按序号查找查找 查找链表中第K个元素

(3)删除操作

删除链表第i个位置上的结点 (1)先找到链表的第i-1个结点,用p指向;//Find(i-1,PtrL); (2)再用指针s指向要被删除的结点(p的下一个结点)//s = p->Next; (3)然后修改指针,删除s所指向的结点//p->Next = s->Next; (4)最后释放s所指结点的空间! //free(s)

(4)求表长

3.完整代码演示

输出结果为:

该链表长度为:10 第4个元素为:6 --删除第4个元素-- 删除后第4个元素为:5 表中是否有元素6:找不到该元素 表中是否有元素5:5

最后更新于

这有帮助吗?