线性表

一.线性表(Linear List)的定义:线性表示具有相同数据类型的n(n>=0)个数据元素的有限序列,通常记为:(a1,a2,a3,...,ai-1,ai,ai+1,...,an)

二线性表的基本操作:

(1)InitList(L):初始化操作,置L为空线性表。

(2)ClearList(L):清除线性表的内容,将L置为空表。

(3)ListLength(L):求表长。

(4)Ins(L,i,Item):插入数据,把表Item插入到表L的i位置。

(5)Del(L,i):删除数据。

(6)GetNext(L,Item,p):获取表L的Item值所在的节点的后继节点并赋值给p。

(7)GetNode(L,i):获取表L中位置为i的节点值。

(8)Loc(L,Item):定位(返回第一次找到该值得位置)。

(9)GetPrior(L,Item,p):获取表L的Item值所在的节点的前趋节点并赋值给p。

三.顺序表(顺序存储,随机存取):线性表的顺序存储方式,是指利用一段连续的内存地址来存储线性表的数据元素。如,在c语言中用数组来实现。存储结构示例。  顺序表的基本操作略。

# define int datatype;
# define maxsize 1024;
typedef struct sequenlist{
    datatype elem[maxsize];
    int length;
}sequenlistalias;

四.链表(随机存储,顺序存取):以链式结构存储的线性表称为链表。链式存储结构是用一组任意的存储单元来存储线性表的节点。每个节点由数据域和指针域两部分组成。链表的命名一般由头指针的名字来命名。为了方便判断空表,插入和删除节点,我们一般在第一个节点前面增加一个附加节点,称为头节点。

五.单链表:每个节点只有一个指针域。如c语言描述。基本操作实现略。

typedef char ElemType;
typedef struct LNode{
    ElemType date;
    struct LNode *next;
}LNode,*LinkList

六.循环链单链表(Circular Linked List):是一种首尾相连的链表。能够提供代码的健壮性,把最后一个节点的指针域指向第一个节点(头节点)。基本操作实现略。。

七.双向链表(Double Linked List):方便查询某个节点的前沿节点,c语言描述。基本操作实现略。

typedef char ElemType;
typedef struct LNode{
    struct LNode *prior;
    ElemType date;
    struct LNode *next;
}LNode,*LinkList

八.双向循环列表:双向链表的首尾相连起来就是双向循环列表。基本操作实现略。

九.静态链表:解决一些设计语言不支持“”指针"数据类型,但是又需要实现链表。如:

# define MAXSIZE 1000
typedef int ElemType;
typedef struct SList
{
    ElemType date;
    int next;
}node;
node SlinkList[MAXSIZE];    /*备用节点空间*/
int av;                     /*游标变量*/

十,线性存表顺序存储与链式存储比较。

运算存储方式元素平均移动位置时间复杂度
初始化线性表顺序存储0O(1)
链式存储0O(1)
删除已存在的表顺序存储0O(1)
链式存储0O(n)
清除表的内容顺序存储0O(n)
链式存储0O(n)
求表长顺序存储0O(1)
链式存储0O(n)
获取某个节点的值顺序存储0O(1)
链式存储0O(n)
定位(按值查找)顺序存储0O(n)
链式存储0O(n)
插入数据顺序存储n-iO(n)
链式存储0O(n)
删除数据顺序存储n-iO(n)
链式存储0O(n)
获取前趋节点顺序存储0O(1)
链式存储0O(n)
获取后继节点顺序存储0O(1)
链式存储0O(n)

结论:频繁查询用顺序存储;频繁删除,增加,或者表表太长用链式存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值