栈和队列、串和数组《C#数据结构和算法》
第3章 栈和队列
栈和队列是非常重要的两种数据结构,在软件设计中应用很多。栈和队列也
是线性结构,线性表、栈和队列这三种数据结构的数据元素以及数据元素间的逻
辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制。
栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表
的另一端进行,所以,把栈和队列称为操作受限的线性表。
3.1 栈
3.1.1 栈的定义及基本运算
栈(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除
等操作,所以,它具有特殊的含义,把表尾称为栈顶( Top),另一端是固定的,
叫栈底( Bottom)。当栈中没有数据元素时叫空栈(Empty Stack)。
2、链栈
栈的另外一种存储方式是链式存储,这样的栈称为链栈(Linked Stack)。链栈
通常用单链表来表示,它的实现是单链表的简化。所以,链栈结点的结构与单链
表结点的结构一样,如图 3.3 所示。由于链栈的操作只是在一端进行,为了操作
方便,把栈顶设在链表的头部,并且不需要头结点。
data next
图 3.3 链栈结点的结构
3.2 队列
3.2.1 队列的定义及基本运算
队列(Queue)是插入操作限定在表的尾部而其它操作限定在表的头部进行的
数据结构( C#语言版)3.2 队列 88
线性表。把进行插入操作的表尾称为队尾(Rear),把进行其它操作的头部称为队
头(Front)。当对列中没有数据元素时称为空对列(Empty Queue)
第4章 串和数组
4.1 串
在应用程序中使用最频繁的类型是字符串。字符串简称串,是一种特殊的线
性表,其特殊性在于串中的数据元素是一个个的字符。字符串在计算机的许多方
面应用很广。如在汇编和高级语言的编译程序中,源程序和目标程序都是字符串
数据。在事务处理程序中,顾客的信息如姓名、地址等及货物的名称、产地和规
格等,都被作为字符串来处理。另外,字符串还具有自身的一些特性。因此,把
字符串作为一种数据结构来研究。
4.2.3 C#中的数组
C#支持一维数组、多维数组及交错数组(数组的数组)。所有的数组类型都
隐含继承自 System.Array。Array 是一个抽象类,本身又继承自 System.Object。
所以,数组总是在托管堆上分配空间,是引用类型。任何数组变量包含的是一个
指向数组的引用,而非数组本身。当数组中的元素的值类型时,该类型所需的内
存空间也作为数组的一部分而分配;当数组的元素是引用类型时,数组包含是只
是引用。Array 还继承了 ICloneable、IList、ICollection、IEnumerable 等接口。
C#中的数组一般是 0 基数组(最小索引为 0),这是为了和其它语言共享代
码。C#也支持非 0 基数组。C#除了能创建静态数组外,还可以创建动态数组,这
通过使用 Array 的静态方法 CreateInstance 方法来实现。
与 String 一样, Array 中的方法有许多。