《数据结构与算法C#语言描述》笔记5_栈和队列

五.栈和队列

(Stack类)

更适用于解决计算机编程领域的注入解释器、编译器等的问题。

构造器

三种方法

            Stackb1 = new Stack();///1,默认10个数据项的容量

            b1.Push(1);

            b1.Push("1");

            Stack<Object> b2=newStack<Object>();///2

            b2.Push(1);

            b2.Push("1");

            string[]a = new string[]{ "1", "2","3" };

            Stackb3 = new Stack(a);///3

            b3.Pop();

            ArrayListf = new ArrayList();

            f.Add(1);

            f.Add("d");

            Stackb4 = new Stack(f);///3

            b4.Pop();

带初始容量的Stack对象

            Stackb5= new Stack(20);///4,初始容量20个数值

            intcoutb5 = b5.Count;///coutb5=0

方法

进栈(Push方法)

数据添加进栈

出栈(Pop方法)

数据从栈中移除

取数(Peek方法)

查看栈顶的数据

CopyTo方法

栈内的内容复制到一个数组中。构造数组时,同样以出栈的顺序,因此数组和栈的索引号为颠倒的。

            string[]a = new string[]{ "1", "2","3" };

            Stackb3 = new Stack(a);///3.[0]=1,[1]=2

            b3.Pop();

 

           string[]ar=newstring[b3.Count];

           b3.CopyTo(ar, 0); ///ar=new string[] {"2", "1" };

 

           string[]ar2 = new string[3];

           (newStack(newstring[] { "1","2","3"})).CopyTo(ar2, 0);///{"3", "2", "1" }

ToArray方法

栈的内容创建新的数组。构造数组时,同样以出栈的顺序,因此数组和栈的索引号为颠倒的。

object[]ar3 = (newStack(new string[] { "1", "2","3" })).ToArray();///{ "3","2", "1" }

实例:表达式求值器

一个栈,用于保存运算的数值。另外一个栈,则用于保存运算的运算符。

"5 + 10 +15 +30"

5

+

10

+

15

+

30

数值栈:5

数值栈:5

数值栈:15

数值栈:15

数值栈:30

数值栈:30

数值栈:60

运算符栈:

运算符栈:+

运算符栈:

运算符栈:+

运算符栈:

运算符栈:+

运算符栈:

 

实例:十进制向多进制的转换

十进制数与进制基数的余数进栈,新十进制数变为原先十进制数与进制基数的商取整。

        static string MulBase(intn_ten, int baseDigit)

        {

            Stackdigits = new Stack();

            do

            {

                digits.Push(n_ten % baseDigit);

                n_ten /= baseDigit;

            } while(n_ten!=0);

            stringr = "";

            while(digits.Count>0)

            {

                r+=digits.Pop().ToString();///[0][1][2][3][4]……,出栈则为字符串左加

            }

            returnr;

        }

队列(Queue类)

更适用于用队列(通过优先队列)来对进程进行排序,也常用于模拟现实世界的过程。

构造器

         Queueq1 = new Queue();///1,默认32个数据项的容量

         Queueq2 = new Queue(100);///2,默认32个数据项的容量

         Queueq3 = new Queue(1,3);///3,默认1数据项的容量,当超出容量时,容量变为当前的三倍。栈则无

         q3.Enqueue(1);///容量为1

         q3.Enqueue(2);///容量为1*3,后面当超出容量时,自动1*3*3的倍数级增加容量

         Queueq4 = new Queue(newint[] { 1, 3, 5,7 });///4,{1,3,5,7}

 

方法

入队(Enqueue方法)
出队(Dequeue方法)
取数(Peek方法)
CopyTo方法

         string[]ar5 = new string[3];

         (new Queue(new string[] {"1","2", "3"})).CopyTo(ar5, 0);///{"1", "2", "3" }

 

ToArray方法

         object[]ar4 = (newQueue(new int[] { 1, 3, 5,7 })).ToArray();///{"1", "2", "3" }

 

实例:模拟人们排队

实例:排列数据

基数排列:通过对一组(三位数以内的)数据进行两遍“排序”。个位数上的数字,依次入10个数字队列的数组。再按这10个数字队列的的数组的顺序,按十位数上的数字,依次入10个数字队列的数组。

继承自Queue类的优先队列

出队优先权高的。

实现方法:重写出队。在出队时,按优先级降序排列。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值