C#编程(五十)----------栈
栈
栈与队列是一个非常类似的容器,他们的区别在于队列是先进先出,而栈是后进先出.
Stack与Stack<T>,像队列一样,栈也提供了泛型与非泛型版本.
Stack的方法:
|
方法 |
说明 |
|
Pop() |
从栈顶读栈并删除元素 |
|
Push() |
存放数据,存在栈顶 |
|
Peek() |
从栈顶读,但不删除 |
案例:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 栈
{
class Program
{
static void Main(string[] args)
{
Stack<string> stack = new Stack<string>();
stack.Push("A");
stack.Push("B");
stack.Push("C");
foreach (var item in stack)
{
Console.WriteLine(item);
}
//因为栈是后进先出的,所以结果是CBA
//以上我们使用枚举器,是不会改变元素的,不可以删除
//现在我们用Pop来读取输出
Console.WriteLine("使用Pop方法读取元素");
while (stack.Count!=0)
{
Console.WriteLine(stack.Pop());
}
Console.WriteLine("Pop之后的栈大小: {0}", stack.Count);
Console.ReadKey();
}
}
}
一.创建栈
Stack类的构造函数提供了三种重载形式:
|
构造函数 |
说明 |
|
public Stack() |
使用默认的初始哈容器创建Stack的新实例 |
|
public Stack(ICollection col) |
使用ICollection集合复制的元素来创建Stack的实例,并具有与集合元素数目相同的初始容量 |
|
public Stack(int initialCapacity) |
通过自定初始容量来创建Stack类的实例 |
案例:
Stack sack = new Stack();//使用默认容量
Stack sack1 = new Stack(new string[5] { "堆栈元素一", "堆栈元素二", "堆栈元素三", "堆栈元素四", "堆栈元素五" });//使用由string数组中的几何元素初始化栈对象
Stack sack2 = new Stack(20);//创建栈对象并指定20个元素
二.元素入栈
为了将元素压入栈中,可以调用Stack类的Push方法.这个方法的声明如下:
public virtual void Push(object obj)
这个方法需要一个object类型的参数obj,表示要被压入到栈中的对象.案例:
Stack sk = new Stack();
sk.Push("1");
sk.Push("2");
sk.Push("3");
sk.Push("4");
sk.Push("5");
//显示栈中内容
foreach (var item in sk)
{
Console.WriteLine(item);
}
//可以看到元素额排列顺序是后入栈的排列在最前面,符合后进先出的规范
Console.ReadKey();
三.元素出栈
元素出栈是指:移除Stack顶部的元素,并返回这个元素的引用.可以通过调用Pop方法实现元素出栈.另外Stack还提供了Peek方法,用于获取顶部元素对象,这个方法并不移除顶部元素.这两个方法的声明如下:
public virtual object Peek();
public virtual object Pop();
案例:
Stack sk = new Stack();
sk.Push("1");
sk.Push("2");
sk.Push("3");
sk.Push("4");
sk.Push("5");
//显示栈中内容
foreach (var item in sk)
{
Console.WriteLine(item);
}
//可以看到元素额排列顺序是后入栈的排列在最前面,符合后进先出的规范
Console.WriteLine("栈顶元素是: {0}", sk.Peek()); ;
Console.WriteLine("移除顶部的元素: {0}",sk.Pop());
//显示栈中内容
foreach (var item in sk)
{
Console.WriteLine(item);
}
Console.ReadKey();
C#编程(五十)----------栈的更多相关文章
- C#高级编程五十四天----Lookup类和有序字典
Lookup类 Dictionary<Tkey,TValue>仅仅为每一个键支持一个值.新类Lookup<Tkey,TValue>是.NET3.5中新增的,它类似与Dictio ...
- 学习ASP.NET Core Razor 编程系列十五——文件上传功能(三)
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 并发编程(十五)——定时器 ScheduledThreadPoolExecutor 实现原理与源码深度解析
在上一篇线程池的文章<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中从ThreadPoolExecutor源码分析了其运行机制.限于篇幅,留下了Scheduled ...
- “全栈2019”Java第五十九章:抽象类与抽象方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十八章:多态中方法返回类型可以是子类类型
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十六章:多态与字段详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十五章:方法的静态绑定与动态绑定
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十四章:多态详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十二章:继承与初始化详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 面渣逆袭:Spring三十五问,四万字+五十图详解
大家好,我是老三啊,面渣逆袭 继续,这节我们来搞定另一个面试必问知识点--Spring. 有人说,"Java程序员都是Spring程序员",老三不太赞成这个观点,但是这也可以看出S ...
随机推荐
- Python 3之str类型、string模块学习笔记
Windows 10家庭中文版,Python 3.6.4, Python 3.7官文: Text Sequence Type — str string — Common string operatio ...
- MXNet深度学习库简介
MXNet深度学习库简介 摘要: MXNet是一个深度学习库, 支持C++, Python, R, Scala, Julia, Matlab以及JavaScript等语言; 支持命令和符号编程; 可以 ...
- Python黑魔法
1. 赋值 In [1]: x = 1 ...: y = 21 ...: print x, y ...: ...: x, y = y, x ...: print x, y 1 21 21 1 2. 列 ...
- Java 基本语法---Java运算符
Java 基本语法---Java运算符 0. 概述 Java中的运算符主要分为以下几种: 算术运算符 赋值运算符 关系运算符 逻辑运算符 条件运算符 位运算符 其他运算符 1. 算术运算符 操作符 描 ...
- [USACO17FEB]Why Did the Cow Cross the Road I G
一开始想写$DP$,发现直接转移完全有后效性 所以本小蒟蒻写了个最短路 每走三步就要吃草是这个题最难搞的地方,我们建图时不妨只对于距离等于三的点连边 考虑完全覆盖所有情况,从一个点走一步,两步,然后三 ...
- SQL Server 2
一.创建数据表 1.连接服务器: 2.右击“表”节点,选择“新建表”,即: 3.在弹出的“表设计器”中,输入表的列名.选择的数据类型及是否允许为空,即: 二.导入数据表 1.右击表名,弹出菜单,选择“ ...
- 自定义yum源
1.创建rpm包的存放目录 mkdir -p /yum/yum-sum/package 2.准备rpm包,可以通过自带yum只下载不安装工具下载 yum install --downloadon ...
- PLSQL Developer 中文显示乱码的解决方法
PLSQL Developer 中文显示乱码是因为 Oracle 数据库所用的编码和 PLSQL Developer 所用的编码不同所导致的. 解决方法: 1. 先查询 Oracle 所用的编码 se ...
- 在 Vim 中优雅地查找和替换
原文更好看链接http://harttle.com/2016/08/08/vim-search-in-file.html 总有人问我 Vim 中能不能查找,当然能!而且是超级强的查找! 这篇文章来详细 ...
- JavaWeb中Tomcat与Eclipse的集成—步骤详解
前面会简单介绍,下翻Tomcat与Eclipse的集成 一.先介绍一下应用程序的结构: 1.到目前为止应用程序物理结构有两种: C/S——Client / server:这种结构的应用,客户端与服务端 ...