时间:2021-05-02
栈(Stack)是限定在表尾端进行插入或删除操作的线性表。因此,表尾具有特殊的含义,称之为栈顶(Top),另一端是固定的,称为栈底(Bottom)。不含任何数据元素的栈为空栈(Empty Stack)。
栈通常记为:S= (a1,a2,…,an),S是英文单词stack的第1个字母。栈中元素按a1,a2,a3,...,an的次序进栈,出栈的次序为栈顶元素。即出栈的次序与进栈相反,an第一个出栈,a1最后一个出栈。所以,栈的操作是按照后进先出(Last In First Out,简称LIFO)或先进后出(First In Last Out,简称FILO)的原则进行的,因此,栈又称为LIFO表或FILO表。
对于栈来说,主要的操作有:
1、构造空栈
2、清空栈:ClearStack()
3、求栈长(获得栈中元素的个数):StackLength()
4、返回栈顶元素:GetTop()
5、压栈操作:Push(object e)
6、弹栈操作(出栈操作):Pop()
7、判断栈是否为空:IsEmpty()
8、判断栈是否已满:IsFull()
using System;class Stack{ int maxsize; //顺序栈的容量 object[] data; //数组,用于存储栈中的数据 int top; //指示栈顶 public object 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 Stack(int size) { data = new object[size]; maxsize = size; top = -1; } //求栈的长度(栈中的元素个数) public int StackLength() { return top+1; } //清空顺序栈 public void ClearStack() { top = -1; } //判断顺序栈是否为空 public bool IsEmpty() { if (top == -1) { return true; } else { return false; } } //判断顺序栈是否为满 public bool IsFull() { if (top == maxsize-1) { return true; } else { return false; } } //入栈操作 public void Push(object e) { if(IsFull()) { Console.WriteLine("栈已满!"); return; } data[++top] = e; } //出栈操作,并返回出栈的元素 public object Pop() { object temp = null; if (IsEmpty()) { Console.WriteLine("栈为空!"); return temp; } temp = data[top]; top --; return temp; } //获取栈顶数据元素 public object GetTop() { if (IsEmpty()) { Console.WriteLine("栈为空!"); return null; } return data[top]; }}//定义测试类class Test{ static void Main() { Stack s = new Stack(10); Random r = new Random(); //随机生成数据 int mid; for(int i = 0;i<10;i++) { mid = (int)r.Next(10,100); //获取10~100之间的整型数据 s.Push(mid); //将数据压栈 Console.WriteLine("将数据{0}压栈,现在栈中元素数为:{1}", mid,s.StackLength()); } Console.WriteLine("\n准备将数据元素888压栈:"); s.Push(888); Console.WriteLine("栈中元素个数为:{0}",s.StackLength()); Console.WriteLine(); for(int j = 0;j<10;j++) //循环出栈 { Console.WriteLine("将数据{0}弹栈,现在栈中元素数为:{1}", s.Pop(),s.StackLength()); } }}
运行结果如下:
本文最初发布在网易博客,现转载到这里:原文地址http://blog.163.com/fujl_2008/blog/static/10378107200810972618942/
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C++用一个栈实现另一个栈的排序算法。分享给大家供大家参考,具体如下:题目:一个栈中元素类型为整型,现在想将该栈从顶到底按从小到大的顺序排序,只许
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点:栈的抽象数据类型顺序栈的设计与实现链式栈的设计与实现栈的应用
导读:本文给出了使用C#实现选择发排序的算法usingSystem;namespaceSelectionSorter{publicclassSelectionS
导读:本文介绍了使用C#实现插入法排序的算法usingSystem;namespaceInsertionSorter{publicclassInsertionS
C语言数据结构之栈简单操作实验:编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:(1)初始化顺序栈(2)插入元素(3)删除栈顶元