目录

一、概述

二、基本的用法

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 stack = new Stack();

//将元素入栈

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

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: