Stack栈=堆栈(因为放在一起叫别扭)
内存堆栈:栈区:存放基本数据类型(int long float char bool)--(编译器自动释放)
枚举类型:enum,
结构类型:struct
堆区:类(基类system.objtect string class)--------(公共语言运行库CLR释放)
接口:interface
数组:int[] string[]
Stack a = new Stack();//声明一个堆栈(先进后出)
//增(压栈)
a.Push(12);//存储的也是ojbect类型
a.Push("haode");
a.Push(new person());//没有范围存放-----------------------------------------------------------------------------------------------------------------
//取
object b = a.Pop();//(注意是取出来,直接这个元素就没有了)
Console.WriteLine(b);//后进先出
//查
object b2 = a.Peek();//(只能查看栈顶的元素)
Console.WriteLine(b2);//只查看栈顶的元素,不做取出操作 -------------------------------------------------------------------------------------------
if (a.Contains("haode"))//查看堆栈里是否有某个元素
{
Console.WriteLine("yeah");
}
//改
a.Clear();//由于堆栈stack和queue队列都没有下标,所以没办法对某个特定的值进行更改,只能清空之后再从新放入
a.Push(10086);
a.Push("zhenhao");
//遍历
Console.WriteLine("总量是:" + "" + a.Count);//总量(stack堆栈queue队列都没有总容量)
foreach (object aa in a)//第一种遍历:堆栈a(遍历类型 存到哪里 In 遍历谁?)(只读)-------------------------------------------------------------
{
Console.WriteLine("第一种遍历:"+""+aa);//
}
object[] bb = a.ToArray();//第二种遍历:将a堆栈转换成object数组------------------------------------------------------------------------------------
for(int i=0;i<bb.Length;++i)
{
Console.WriteLine("第二种遍历:"+""+bb[i]);-
}
while(a.Count>0)//如果a中还有东西则(前面foreach(),转object数组都是只查看不更改原始a堆栈内容,后两种是直接一个一个取出后查看)-------------
{
Console.WriteLine("第三种遍历:"+""+a.Pop());
}
int t = (int)a.Count;-------------------------------------------------------------------------------------------------------------------------------------
for (int i = 0; i < t; ++i)//第四种遍历:想要for循环遍历注意a.count是变化的,每取出一个值则a.count-1
{
Console.WriteLine("第四种遍历:"+""+a.Pop());
}
//装箱拆箱
int qq = (int)a.Pop();//引用类型转值类型,拆箱
//与queue队列一样