没有合适的资源?快使用搜索试试~ 我知道了~
这节我们讨论了两种好玩的数据结构,栈和队列。 老样子,什么是栈, 所谓的栈是栈(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top) ,另一端是固定的,叫栈底(Bottom) 。当栈中没有数据元素时叫空栈(Empty Stack)。这个类似于送饭的饭盒子,上层放的是红烧肉,中层放的水煮鱼,下层放的鸡腿。你要把这些菜取出来,这就引出来了栈的特点先进后出(First in last out)。 具体叙述,加下图。 栈通常记为:S= (a1,a2,…,an),S是英文单词stack的第 1 个字母。a1为栈底元素,an为
资源推荐
资源详情
资源评论
C#数据结构与算法揭秘五数据结构与算法揭秘五 栈和队列栈和队列
这节我们讨论了两种好玩的数据结构,栈和队列。
老样子,什么是栈, 所谓的栈是栈(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除等操作,所以,它具有特殊
的含义,把表尾称为栈顶(Top) ,另一端是固定的,叫栈底(Bottom) 。当栈中没有数据元素时叫空栈(Empty Stack)。这个类似于
送饭的饭盒子,上层放的是红烧肉,中层放的水煮鱼,下层放的鸡腿。你要把这些菜取出来,这就引出来了栈的特点先进后出(First in
last out)。 具体叙述,加下图。
栈通常记为:S= (a1,a2,…,an),S是英文单词stack的第 1 个字母。a1为栈底元素,an为栈顶元素。这n个数据元素按照a1,a2,…,an的顺
序依次入栈,而出栈的次序相反,an第一个出栈,a1最后一个出栈。所以,栈的操作是按照后进先出(Last In First Out,简称LIFO)或先
进后出(First In Last Out,简称FILO)的原则进行的, 因此, 栈又称为LIFO表或FILO表。 栈的操作示意图如图所示。
栈的形式化定义为:栈(Stack)简记为 S,是一个二元组,顾定义为S = (D, R)
其中:D 是数据元素的有限集合;
R 是数据元素之间关系的有限集合。
栈的一些基本操作的概述:由于栈只能在栈顶进行操作, 所以栈不能在栈的任意一个元素处插入或删除元素。因此,栈的操作是线性表
操作的一个子集。栈的操作主要包括在栈顶插入元素和删除元素、取栈顶元素和判断栈是否为空等等方面的操作。
同样,我们以 C#语言的泛型接口来表示栈,接口中的方法成员表示基本操作。为表示的方便与简洁,把泛型栈接口取名为 IStack(实际
上,在 C#中没有泛型接口 IStack<T>, 泛型栈是从 IEnumerable<T>和 ICollection 等接口继承而来,这一点与线性表有着本质的区别)
。
栈的接口定义源代码如下所示。
public interface IStack<T> {
//初始条件:栈存在;操作结果:返回栈中数据元素的个数。
int GetLength(); //求栈的长度 伪代码 index++
//初始条件:栈存在; 操作结果:如果栈为空返回 true,否则返回 false。伪代码 if(top==null) return true;else return false;
bool IsEmpty(); //判断栈是否为空
//初始条件:栈存在; 操作结果:使栈为空。伪代码 top=null;
void Clear(); //清空操作
//初始条件:栈存在; 操作结果:将值为 item 的新的数据元素添加到栈顶,栈发生变化。伪代码 top=item;index++;
void Push(T item); //入栈操作
//初始条件:栈存在且不为空; 操作结果:将栈顶元素从栈中取出,栈发生变化 伪代码:return top;index–;
T Pop(); //出栈操作
//初始条件:栈表存在且不为空; 操作结果:返回栈顶元素的值,栈不发生变化。伪代码 get top;
T GetTop(); //取栈顶元素
}
栈也分为两种的形式,一种是顺序栈,一种是链栈。
第一种 顺序栈(Sequence Stack):
用一片连续的存储空间来存储栈中的数据元素,这样的栈称为顺序栈(Sequence Stack)。类似于顺序表,用一维数组来存放顺序栈中的
数据元素。栈顶指示器 top 设在数组下标为 0 的端,top 随着插入和删除而变化,当栈为空时,top=-1。下图是顺序栈的栈顶指示器 top
与栈中数据元素的关系图。
顺序栈类 SeqStack<T>源代码的实现如下所示。
public class SeqStack<T> : IStack<T> {
private int maxsize; //顺序栈的容量 最大的存储空间
private T[] data; //数组,用于存储顺序栈中的数据元素 存储数据的多少
private int top; //指示顺序栈的栈顶 栈顶指针
//索引器
public T this[int index]
{
get
{
return data[index];
}
set
{
data[index] = value;
}
}
//容量属性
public int Maxsize
{
get
{
return maxsize;
}
set
{
maxsize = value;
}
}
//栈顶属性
public int Top
{
get
{
return top;
}
}
//构造器 进行相应初始化的工作 进行赋值
public SeqStack(int size)
{
data = new T[size];
剩余15页未读,继续阅读
资源评论
weixin_38735804
- 粉丝: 5
- 资源: 966
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功