数据结构之线性表

线性结构的特点:

在数据元素的非空有限集中,

(1)存在唯一的一个被称做“第一个”的数据元素;

(2)存在唯一的一个被称做“最后一个”的数据元素;

(3)除第一个之外,集合中的每个数据元素均只有一个前驱;

(4)除最后一个之外,集合中每个数据元素均只有一个后继

 

 

线性表的定义:
线性表示最常用且最简单的一种数据结构

一个线性表是n个数据元素的有限序列

 

线性表的数据元素可以是:一个数,一个符号,一副图片、一页书或更多复杂的信息

 

线性表的实现:
即线性表的物理存储结构:
线性表属于逻辑层的概念是一种逻辑结构,指定的是数据间的逻辑关系。

存储结构,是数据结构物理存储时的方式,主要分为:顺序存储,链式存储

线性表的具体实现在不同语言中不同
根据物理存储方式的不同


线性表的表示和实现


顺序存储结构线性表

2000:0001
2000:0003
2000:0005
2000:0007
2000:0009
2000:0011
2000:0013
2000:0015
2000:0017
...
2000:1001
2000:1003
0000000000000001
0000000000000010
0000000000000011
0000000000000100
0000000000000101
0000000000000110
0000000000000111
0000000000001000
0000000000001001
                
                
                
a[9]
1
2
3
4
5
6
7
8
9
 
 
 

 

链式存储结构线性表

 

 

 

 

 

几种常见线性表数据结构

-------------------------------------------------------------------------------------------------------------------

栈是限定仅在表尾进行插入或删除操作的线性表

栈的表尾称为栈顶,表头称为栈底,不含元素的空表称为空栈

栈的实现:顺序结构实现(数组)和链式结构实现(链表)

栈的抽象数据类型:

ADT Stack{

数据对象:D={ai|ai(- ElemSet,i=1,2,...,n,n>=0}

数据关系:R1={<ai-1,ai>|ai-1,ai(- D,i=2,...,n}

基本操作:

InitStack(&S) 构造一个空栈S

DestroyStack(&S) 栈S存在则栈S被销毁

ClearStack(&S) 栈S存在则清为空栈

StackEmpty(S) 栈S存在则返回TRUE,否则FALSE

StackLength(S) 栈S存在则返回S的元素个数,即栈的长度

GetTop(S,&e) 栈S存在且非空则返回S的栈顶元素

Push(&S,e) 栈S存在则插入元素e为新的栈顶元素

Pop(&S,&e) 栈S存在且非空则删除S的栈顶元素并用e返回其值

StackTraverse(S,visit())栈S存在且非空则从栈底到栈顶依次对S的每个数据元素调用函数visit()一旦visit()失败,则操作失败

}ADT Stack

 

队列

-------------------------------------------------------------------------------------------------------------------

队列:是一种先进先出的线性表。它只允许在表的一端进行插入,而在表的另一端进行删除元素。像日常生活中的排队。

在队列中,允许插入的一端称为队尾,允许删除的一端称为队头

 

抽象数据类型队列:

ADT Queue{

数据对象: D={ai| ai(-ElemSet,i=1,2,...,n,n>=0}

数据关系: R1={<ai-1,ai> | ai-1,ai(- D,i=2,...,n}

基本操作:

InitQueue(&Q) 构造一个空队列Q

Destroyqueue(&Q) 队列Q存在则销毁Q

ClearQueue(&Q) 队列Q存在则将Q清为空队列

QueueEmpty(Q) 队列Q存在,若Q为空队列则返回TRUE,否则返回FALSE

QueueLenght(Q) 队列Q存在,返回Q的元素个数,即队列的长度

GetHead(Q,&e) Q为非空队列,用e返回Q的队头元素

EnQueue(&Q,e) 队列Q存在,插入元素e为Q的队尾元素

DeQueue(&Q,&e) Q为非空队列,删除Q的队头元素,并用e返回其值

QueueTraverse(Q,vivsit()) Q存在且非空,从队头到队尾,依次对Q的每个数据元素调用函数visit()。一旦visit()失败,则操作失败

}ADT Queue

 

-------------------------------------------------------------------------------------------------------------------

串(字符串)是一种特殊的线性表,它的数据元素为字符组成,计算机非数值处理的对象经常是字符串数据,。

串定义:

由零个或多个任意字符组成的字符序列。一般记作:
      s  = "S1S2.....Sn"

其中s 是串名,用双引号界定

Si为一个任意字符,称为串的元素

子串与主串:串中任意连续的字符组成的子序列称为该串的子串。包含子串的串相应的称为主串。

子串的位置:子串的第一个字符在主串中的符号称为子串的位置

串相等:称两个串是相等的,是指两个串的长度相等且对应字符都相等

 

串的抽象数据类型的定义:

ADT String{

数据对象:D={ai|ai(-CharacterSet,i=1,2,...,n,n>=0}

数据关系:R1={<ai-1,ai>|ai-1,ai(-D,i=2,...,n}

基本操作:

StrAssign(&T,chars)

chars是字符常量。生成一个其值等于chars的串T。

StrCopy(&T,S)

串S存在则由串S复制得串T

StrEmpty(S)

串S存在则若S为空串,返回真否则返回假

StrCompare(S,T)

串S和T存在,若S>T,则返回值大于0,若S=T,则返回值=0,若S<T,则返回值<0

StrLength(S)

串S存在返回S的元素个数称为串的长度.

ClearString(&S)

串S存在将S清为空串

Concat(&T,S1,S2)

串S1和S2存在用T返回由S1和S2联接而成的新串

SubString(&Sub,S,pos,len)

串S存在,1<=pos<=StrLength(S)且0<=len<=StrLength(S)-pos+1

Index(S,T,pos)

串S和T存在,T是非空,1<=pos<=StrLength(S),若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置,否则函数值为0

Replace(&S,T,V)

串S,T和V存在,T是非空串,用V替换主串S中出现的所有与T相等的不重叠的子串

StrInsert(&S,pos,T)

串S和T存在,1<=pos<=StrLength(S)+1,在串S的第pos个字符之前插入串T

StrDelete(&S,pos,len)

串S存在,1<=pos<=StrLength(S)-len+1从串中删除第pos个字符起长度为len的子串

DestroyString(&S)

串S存在,则串S被销毁

}ADT String

 

线性表的推广------------------广义表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值