第2章受限的线性表

最后更新于:2022-04-01 19:51:30

在[绪论](http://blog.csdn.net/u013595419/article/details/50461536)中,我们介绍了数据结构三要素, [第1章](http://blog.csdn.net/u013595419/article/details/50461712)中,讲解了逻辑结构分类中线性结构的第一个部分——一般线性表,这章开始讲解逻辑结构线性结构的第二个部分——受限的线性表。这里先巩固下逻辑结构的分类,如下图所示: ![逻辑结构](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-14_56e669469a5b1.jpg "") 受限线性表最简单直白的理解便是插入,删除,查找等操作时,不能随心所欲的进行,必须遵循一定的限制(规则)。 ## 一.栈 ### 1.1定义 栈(stack)是一种只允许在一端进行插入或删除操作的线性表。 一般规定,栈只能在栈顶进行插入,删除操作。因此访问元素的顺序是先进后出。 如下图所示: ![栈](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/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://docs.gechiui.com/gc-content/uploads/sites/kancloud/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 ';