五.栈和队列
栈(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类的优先队列
出队优先权高的。
实现方法:重写出队。在出队时,按优先级降序排列。
?