线性结构的特点:
在数据元素的非空有限集中,
(1)存在唯一的一个被称做“第一个”的数据元素;
(2)存在唯一的一个被称做“最后一个”的数据元素;
(3)除第一个之外,集合中的每个数据元素均只有一个前驱;
(4)除最后一个之外,集合中每个数据元素均只有一个后继
线性表的定义:
线性表示最常用且最简单的一种数据结构
一个线性表是n个数据元素的有限序列
线性表的数据元素可以是:一个数,一个符号,一副图片、一页书或更多复杂的信息
线性表的实现:
即线性表的物理存储结构:
线性表属于逻辑层的概念是一种逻辑结构,指定的是数据间的逻辑关系。
存储结构,是数据结构物理存储时的方式,主要分为:顺序存储,链式存储
线性表的具体实现在不同语言中不同
根据物理存储方式的不同
线性表的表示和实现:
顺序存储结构线性表
|
| a[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
线性表的推广------------------广义表