栈与队列是一个非常类似的容器,他们的区别在于队列是先进先出,而栈是后进先出.

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#编程(五十)----------栈的更多相关文章

  1. C#高级编程五十四天----Lookup类和有序字典

    Lookup类 Dictionary<Tkey,TValue>仅仅为每一个键支持一个值.新类Lookup<Tkey,TValue>是.NET3.5中新增的,它类似与Dictio ...

  2. 学习ASP.NET Core Razor 编程系列十五——文件上传功能(三)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  3. 并发编程(十五)——定时器 ScheduledThreadPoolExecutor 实现原理与源码深度解析

    在上一篇线程池的文章<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中从ThreadPoolExecutor源码分析了其运行机制.限于篇幅,留下了Scheduled ...

  4. “全栈2019”Java第五十九章:抽象类与抽象方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第五十八章:多态中方法返回类型可以是子类类型

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. “全栈2019”Java第五十六章:多态与字段详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. “全栈2019”Java第五十五章:方法的静态绑定与动态绑定

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第五十四章:多态详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第五十二章:继承与初始化详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. 面渣逆袭:Spring三十五问,四万字+五十图详解

    大家好,我是老三啊,面渣逆袭 继续,这节我们来搞定另一个面试必问知识点--Spring. 有人说,"Java程序员都是Spring程序员",老三不太赞成这个观点,但是这也可以看出S ...

随机推荐

  1. private,protected,public和default的区别

    private,protected,public和default的区别 private,protected,public和default作为Java中的访问修饰符,他们的最大区别就在于访问权限不同: ...

  2. Laravel 自定义创建时间、更新时间字段

    Model 中,如果启动了 timestamps public $timestamps = true; 默认,laravel 会操作对应数据表的 created_at, updated_at 字段. ...

  3. Centos7 服务器启动jar包

    首先Centos7 推荐我们这么运行项目 首先执行命令: cd /ets/systemd/system到这个目录下,新建一个 yourProjectName.service,可以把yourProjec ...

  4. P1164 小A点菜 洛谷

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...

  5. JAVA死锁的写法

    在java开发中,避免不了要加锁控制程序逻辑,但加锁有可能导致死锁,造成线程永远卡死在等待释放锁,后面的代码得不到执行: 在java里,一般是通过synchronized关键字加锁,在jdk1.5版本 ...

  6. js数据结构之链表(单链表、双向链表、循环链表)

    首先,链表有以下特点: 1. 存储空间不固定,可灵活扩充 2.方便多次的插入和删除,效率较高 单链表 单链表是最常用的链表,其对数据的操作均为单项的,向后查找的. /* 链表(基于对象) 此处为单链表 ...

  7. 循序渐进学.Net Core Web Api开发系列【14】:异常处理

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍异 ...

  8. 容器(Container)Frames和Panels

    Frames 1)是Window的子类 2)具有标题和缩放角 3)从容器继承并以add方式添加组件 4)能以字符串规定的标题来创建不可见框架对象 5)能将BorderLayout当做缺省布局管理器 6 ...

  9. android 调试Installation failed with message INSTALL_FAILED_USER_RESTRICTED: Install canceled by user.

    真机调试 遇到的问题 在使用真机调试的程序的时候出现了这个问题. 解决方法如下

  10. 1295 N皇后问题

    题目描述 Description 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个皇后,任 ...