免费域名申请哪个最好自贡网站seo
目录
一、概述
二、基本的用法
1.入栈
2.出栈
Pop 方法
Peek 方法
3.判断元素是否存在
4.获取 Stack 的长度
5.遍历 Stack
6.清空容器
7.Stack 泛型类
三、结束
一、概述
栈表示对象的简单后进先出 (LIFO) 非泛型集合。
Stack 和 List 一样是一种储存容器,它遵循先进后出的原则,能够存储任意类型,但并不能获取到指定的位置,只能存入和取出,取出元素后,Stack 内部的元素自动删除。
详细API参考:Stack 类 (System.Collections) | Microsoft Learn
二、基本的用法
1.入栈
入栈使用 push 方法,这里可以添加任意类型
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);Console.ReadKey();}}
}
2.出栈
出栈常用的方法有两种,第一种:
Pop 方法
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);var value = stack.Pop();Console.WriteLine(value);Console.WriteLine("count:" + stack.Count);Console.ReadKey();}}
}
运行
这里可以看到,最后添加的 4.5 ,被最先取出来,取出来的同时,也从 stack 中删除了,此时的长度为3, 这就是概述中描述的 先进后出 原则,听起来有点难以理解,其实就是,谁最后一个添加进来,谁就第一个出去,专逮住队伍的最后一个往出扯。
第二种:
Peek 方法
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);var value = stack.Peek();Console.WriteLine(value);Console.WriteLine("count:" + stack.Count);Console.ReadKey();}}
}
运行
Peek 可以根据后进先出的原则取出一个元素,它并不会像 Pop 方法一样,把元素删除,但是也只能取一个元素,看下面代码,重复的获取是没用的,要想数据一个个取出来,还是得老老实实的用 Pop 方法。
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);var value1 = stack.Peek();var value2 = stack.Peek();var value3 = stack.Peek();Console.WriteLine(value1);Console.WriteLine(value2);Console.WriteLine(value3);Console.ReadKey();}}
}
运行
3.判断元素是否存在
使用 Contains 方法可以判断元素是否存在,如下代码
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);Console.WriteLine("是否存在:" + stack.Contains(4.5));Console.ReadKey();}}
}
运行
4.获取 Stack 的长度
长度的获取和 List 一样,使用 Count 属性
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);Console.WriteLine("长度:" + stack.Count);Console.ReadKey();}}
}
运行
5.遍历 Stack
Stack 可以使用 foreach 遍历,并且不会移除元素
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);foreach (var item in stack){Console.WriteLine(item);}Console.WriteLine("长度:" + stack.Count);Console.ReadKey();}}
}
运行
6.清空容器
清除 stack 使用 Clear 方法
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);stack.Clear();Console.WriteLine("长度:" + stack.Count);Console.ReadKey();}}
}
运行
7.Stack 泛型类
Stack 泛型类 和 Stack 的用法其实没有什么不同,Stack 泛型类 只是在使用时多了一个约束,不能和 Stack 标准形式一样,可以添加任意类型到栈中,而是使用固定的元素类型
using System;
using System.Collections.Generic;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack<string> stack = new Stack<string>();//将元素入栈stack.Push("a");stack.Push("b");stack.Push("c");//栈的元素个数int count = stack.Count;//是否包含指定的元素bool b = stack.Contains("a");//Stack.Peek() 方法返回顶部的对象而不将其从堆栈中移除string name = stack.Peek();// Pop 把元素出栈,栈中就没有这个元素了string s1 = stack.Pop();Console.WriteLine(s1);string s2 = stack.Pop();Console.WriteLine(s2);string s3 = stack.Pop();Console.WriteLine(s3);Console.ReadKey();}}
}
三、结束
最后,我们来看看 Stack 有那些特点:
先进后出,存在装箱拆箱,存储任意类型,无法使用 for 循环遍历查看元素,无法获取指定位置元素,只能查看获取栈顶元素。
end