在[绪论](http://blog.csdn.net/u013595419/article/details/50461536)中,我们介绍了数据结构三要素, [第1章](http://blog.csdn.net/u013595419/article/details/50461712)中,讲解了逻辑结构分类中线性结构的第一个部分——一般线性表,这章开始讲解逻辑结构线性结构的第二个部分——受限的线性表。这里先巩固下逻辑结构的分类,如下图所示:
![逻辑结构](https://box.kancloud.cn/2016-03-14_56e669469a5b1.jpg "")
受限线性表最简单直白的理解便是插入,删除,查找等操作时,不能随心所欲的进行,必须遵循一定的限制(规则)。
## 一.栈
### 1.1定义
栈(stack)是一种只允许在一端进行插入或删除操作的线性表。
一般规定,栈只能在栈顶进行插入,删除操作。因此访问元素的顺序是先进后出。
如下图所示:
![栈](https://box.kancloud.cn/2016-03-14_56e6694892b11.jpg "")
这里介绍几个重要的概念:
> - 栈顶(top):栈的操作中,仅允许插入和删除的那一端。
> - 栈底(bottom):固定的,不允许进行插入和删除操作的那一端。
> - 空栈:不含有任何元素的空线性表。
### 1.2基本操作
~~~
InitStack(&S) //初始化一个空栈S
StackEmpty(S) //判断一个栈是否为空
Push(&S,x) //入栈,若栈未满,则将x加入使之称为新栈顶
Pop(&S,x) //出栈,若栈非空,则弹出栈顶元素,并用x返回
GetTop(S,&x) //读取栈顶元素,若栈S非空,则用x返回栈顶元素
ClearStack(S) //销毁栈,并释放栈S占用的存储空间
~~~
## 二.队列
### 2.1定义
队列(Queue)简称队,只允许在线性表的一端进行插入,另一端进行删除。
一般规定,只能在队尾进行插入操作,队头进行删除操作。因此访问时的顺序是先进先出。
如下图所示:
![队列](https://box.kancloud.cn/2016-03-14_56e66948a2715.jpg "")
介绍几个重要的概念:
> - 队头:允许删除的一端,又称为队首。
> - 队尾:允许插入的一端。
> - 空队列:不含任何元素的空表。
### 2.2基本操作
~~~
InitQueue(&Q) //初始化队列,构造一个空队列
QueueEmpty(&Q) //判断队列是否为空
EnQueue(&Q,x) //入队,若队列Q未满,将x加入,使之称为新的队尾
DeQueue(&Q,&x) //出队,若队列Q非空,删除队头元素,并用x返回
GetHead(Q,&x) //读取队头元素,若队列非空,则将队头元素赋值给x
~~~
## 三.串
### 3.1定义
字符串(string)简称串,是由零个或多个字符组成的有穷序列。
介绍几个重要概念:
> - 串长:串中所含字符的个数
> - 子串:一个串中任意个连续字符组成的子序列(含空串,但不含串本身)
> - 主串:包含子串的串
> - 空串:含零个字符的串,通常用 Φ 表示。
### 3.2基本操作
~~~
StrAssign(&T,chars) //由字符串常量chars生成字符串T的操作。
StrCopy(&T,S) //由串S复制生成串T的操作。
StrCompare(S,T) //若S=T返回0,S>T返回正数,S<T返回负数。
StrLength(S) //返回串S的长度。
Concat(&T,S1,S2) //将串S1和S2连接起来生成串T的操作。
SubString(&Sub,S,pos,len)//以串S中pos位置开始的len个字符生成子串Sub的操作。
Index(S,T,pos) //返回子串T在S中pos个字符以后出现的位置。
Replace(&S,T,V) //将串S中所有不重叠子串T替换为串V的操作。
StrInsert(&S,pos,T) //在串S中第pos个字符前插入串T的操作。
StrDelete(&S,pos,len) //删除串S中第pos个字符开始的len个字符的操作
~~~
- 前言
- 绪论
- 第1章线性表
- 第1章第1节 线性表的顺序表示
- 第1章第1节练习题1 删除最小值
- 第1章第1节练习题2 逆置顺序表
- 第1章第1节练习题3 删除指定元素
- 第1章第1节练习题4 有序表删除指定区间值
- 第1章第1节练习题5 无序表删除指定区间值
- 第1章第1节练习题6 删除重复值
- 第1章第1节练习题7 顺序表的归并
- 第1章第1节练习题8 顺序表循环移位
- 第1章第1节练习题9 查找指定值
- 第1章第1节练习题10 查找中位数
- 第1章第2节 线性表的链式表示(1)
- 第1章第2节 线性表的链式表示(2)
- 第1章第2节 线性表的链式表示(3)
- 第1章第2节练习题1 递归删除指定结点
- 第1章第2节练习题2 非递归删除指定结点
- 第1章第2节练习题3 删除最小值结点
- 第1章第2节练习题4 删除指定区间结点
- 第1章第2节练习题5 删除重复结点
- 第1章第2节练习题6 反向输出
- 第1章第2节练习题7 递减输出
- 第1章第2节练习题8 奇偶拆分单链表
- 第1章第2节练习题9 查找公共结点
- 第1章第2节练习题10 查找指定倒数结点
- 第1章第2节练习题11 就地逆置单链表
- 第1章第2节练习题12 单链表之插入排序
- 第1章第2节练习题13 单链表之选择排序
- 第1章第2节练习题14 判断子序列
- 第1章第2节练习题15 拆分并逆序单链表
- 第1章第2节练习题16 归并并逆序单链表
- 第1章第2节练习题17 使用相同值结形成新单链表
- 第1章第2节练习题18 求两个单链表的交集
- 第1章第2节练习题19 判断循环双链表对称
- 第1章第2节练习题20 连接两个循环单链表
- 第1章第2节练习题21 输出并删除最小值结点
- 第1章第2节练习题22 按结点访问频度排序
- 第1章第3节 线性表的比较
- 第2章受限的线性表
- 第2章第1节 栈
- 第2章第1节练习题1 判断栈的操作次序是否合法
- 第2章第1节练习题2 判断是否中心对称
- 第2章第2节 队列
- 第2章第1节练习题3 共享栈的基本操作
- 第2章第2节练习题1 逆置队列
- 第2章第2节练习题2 使用栈模拟队列操作
- 第2章第2节练习题3 使用队列模拟渡口管理
- 第2章第3节 串
- 第2章第3节练习题1 串的模式匹配(Basic)
- 第2章第3节练习题2 串的模式匹配(KMP)