C#高级编程五十天----栈
来源:互联网 发布:win7隐藏网络连接不上 编辑:程序博客网 时间:2024/05/16 06:52
栈
栈与队列是一个非常类似的容器,他们的区别在于队列是先进先出,而栈是后进先出.
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#高级编程五十一天----链表
- C#高级编程五十七天----位数组
- C#高级编程五十八天----并行集合
- C#高级编程五十三天----字典Dictionary<TKey,TValue>
- C#高级编程五十五天----HashSet和SortedSet
- C#高级编程五十九天----集合的性能
- C#高级编程第二天
- C#高级编程第四天
- C#高级编程第六天----枚举
- C#高级编程十二天----函数
- C#高级编程十六天----匿名类型
- C#高级编程三十二天----数组基础
- C#高级编程三十六天----元组
- C#高级编程四十六天----正则表达式
- C#高级编程五十二天----有序列表
- C#高级编程七十天----dynamic类型
- C#高级编程八十天----异常类
- CSS Reset
- Android应用程序签名(官方文档中文版)
- VLAN访问控制列表
- ngx_queue_t双向链表
- 杭电1076 An Easy Task
- C#高级编程五十天----栈
- CiscoWork2000使用感
- Java实现监控多个线程状态的实现
- 奖学金文章更新 连载10第一篇 黄江桂 海口第1期学员
- 数据位交换
- java web 开发环境部署,zving框架
- Postfix邮件服务器搭建(五)
- 一些开发有用的资源网址
- 设计模式-适配器模式(Adapter Pattern)