志在指尖
用双手敲打未来

数据结构之队列and栈总结分析

一、前语:
数据结构中行列和栈也是常见的两个数据结构,行列和栈在实际运用场景上也是相得益彰的,下面简单总结一下,如有不对之处,多多指点沟通,谢谢。
二、行列简介
行列顾名思义便是排队的意思,依据我们的实际生活不难理解,排队便是有先后顺序,先到先得,其实在程序数据结构中的行列其作用也是相同,及先进先出。
行列大概有如下一些特性:
1、操作灵敏,在初始化时不需要指定其长度,其长度主动增加(默许长度为32)
注:在实际运用中,假如事前可以预估其长度,那么在初始化时指定长度,可以提高功率
2、泛型的引进,行列在界说时可以指定数据类型防止装箱拆箱操作
3、存储数据满意先进先出准则
c#中有关行列的几个常用办法:
Count:Count属性回来行列中元素个数。
Enqueue:Enqueue()办法在行列一端增加一个元素。
Dequeue:Dequeue()办法在行列的头部读取和删去元素。假如在调用Dequeue()办法时,行列中不再有元素,就抛出一个InvalidOperationException类型的反常。
Peek:Peek()办法从行列的头部读取一个元素,但不删去它。
TrimExcess:TrimExcess()办法从头设置行列的容量。Dequeue()办法从行列中删去元素,但它不会从头设置行列的容量。要从行列的头部去除空元素,应运用TrimExcess()办法。
Clear:Clear()办法从行列中移除所有的元素。
ToArray:ToArray()仿制行列到一个新的数组中。c#
下面经过行列来实例模仿音讯行列的完成流程:
usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;namespacedataStructureQueueTest
{classProgram
{staticvoidMain(string[]args)
{
Console.WriteLine(“经过Queue来模仿音讯行列的完成”);
QueueTestqueueTest=newQueueTest();while(true)
{
Console.WriteLine(“请输入你操作的类型:1:代表生成一条音讯,2:代表消费一条音讯”);stringtype=Console.ReadLine();if(type==”1″)
{
Console.WriteLine(“请输入详细音讯:”);stringinforValue=Console.ReadLine();
queueTest.InformationProducer(inforValue);
}elseif(type==”2″)
{////在消费音讯的时候,模仿一下,消费成功与消费失利下次持续消费的场景objectinforValue=queueTest.InformationConsumerGet();if(inforValue==null)
{
Console.WriteLine(“当时无可音讯可消费”);
}else{
Console.WriteLine(“获取到的音讯为:”+inforValue);
Console.WriteLine(“请输入音讯消费成果:1:成功消费音讯,2:音讯消费失利”);stringconsumerState=Console.ReadLine();/////补白:该操作方法线程不安全,在多线程不要直接运用if(consumerState==”1″)
{
queueTest.InformationConsumerDel();
}
}
}else{
Console.WriteLine(“操作有误,请从头选择”);
}
}
}
}//////行列操练///publicclassQueueTest
{//////界说一个行列///publicQueue<string>queue=newQueue<string>();//////生成音讯–入行列//////publicvoidInformationProducer(stringinforValue)
{
queue.Enqueue(inforValue);
}//////消费音讯—出行列–只获取数据,不删去数据//////publicobjectInformationConsumerGet()
{if(queue.Count>0)
{returnqueue.Peek();
}returnnull;
}//////消费音讯—出行列—获取数据的同时删去数据//////publicstringInformationConsumerDel()
{if(queue.Count>0)
{returnqueue.Dequeue();
}returnnull;
}
}
}
三、栈简介
栈和行列在运用上很相似,仅仅栈的数据存储满意先进后出准则,栈有如下一些特性:
1、操作灵敏,在初始化时不需要指定其长度,其长度主动增加(默许长度为10)
注:在实际运用中,假如事前可以预估其长度,那么在初始化时指定长度,可以提高功率
2、泛型的引进,栈在界说时可以指定数据类型防止装箱拆箱操作
3、存储数据满意先进后出准则
c#中有关栈的几个常用办法:
Count:Count属性回来栈中的元素个数。
Push:Push()办法在栈顶增加一个元素。
Pop:Pop()办法从栈顶删去一个元素,并回来该元素。假如栈是空的,就抛出一个InvalidOperationException类型的反常。
Peek:Peek()办法回来栈顶的元素,但不删去它。
Contains:Contains()办法确定某个元素是否在栈中,假如是,就回来true。
下面经过一个栈来模仿阅读器的回退行进操作的完成
usingSystem;usingSystem.Collections.Generic;namespacedataStructureStackTest
{classProgram
{staticvoidMain(string[]args)
{////经过栈来模仿阅读器回退行进操作////1、界说两个栈,别离记载回退的地址调集,和行进地址调集////2、在操作详细的回退或许行进操作时////假如和前一次操作相同,那么就取出对应行列的一条数据存储到别的一个行列Console.WriteLine(“本操练模仿阅读器的回退行进操作:”);///假定阅读器已阅读了20个网站记载StackTeststackTestBack=newStackTest(20);
StackTeststackTestGo=newStackTest(20);for(inti=0;i<20;i++)
{
stackTestBack.PushStack(“网站”+(i+1).ToString());
}////记载上一次操作stringbeforOpert=””;while(true)
{
Console.WriteLine(“”);
Console.WriteLine(“请输入你操作的类型:1:回退,2:行进”);stringtype=Console.ReadLine();if(type==”1″)
{////出栈if(beforOpert==type)
{
stackTestGo.PushStack(stackTestBack.GetAndDelStack());
}stringwbeSit=stackTestBack.GetStack();
Console.WriteLine(“回退到页面:”+wbeSit);
beforOpert=type;
}elseif(type==”2”)
{////出栈if(beforOpert==type)
{
stackTestBack.PushStack(stackTestGo.GetAndDelStack());
}stringwbeSit=stackTestGo.GetStack();
Console.WriteLine(“回退到页面:”+wbeSit);
beforOpert=type;
}else{
Console.WriteLine(“请输入正确的操作方法!!”);
}
}
}
}//////行列操练///publicclassStackTest
{//////界说一个栈///publicStack<string>stack;//////无参数结构函数,栈初始化为默许长度///publicStackTest()
{
stack=newStack<string>();
}//////有参数结构函数,栈初始化为指定长度///假如在界说行列时,假如知道需要存储的数据长度,那么最好预估一个长度,并初始化指定的长度///publicStackTest(intstackLen)
{
stack=stackLen>0?newStack<string>(stackLen):newStack<string>();
}//////入栈//////publicvoidPushStack(stringinforValue)
{
stack.Push(inforValue);
}//////出栈(但不删去)//////publicstringGetStack()
{if(stack.Count>0)
{returnstack.Peek();
}returnnull;
}//////出栈(并删去)//////publicstringGetAndDelStack()
{if(stack.Count>0)
{returnstack.Pop();
}returnnull;
}
}
}
四、运用场景总结
依据行列和栈的特点,下面简单总结一下行列和栈的一些实际运用场景
行列:
1、异步记载日志,此处会涉及到单例模式的运用
2、音讯行列
3、业务排队,比方12306车票购买排队等候
4、其他契合先进先出准则的业务操作
栈:
1、可回退的操作记载,比方:阅读器的回退操作
2、核算表达式匹配,比方:核算器表达式核算
3、其他契合先进后出准则的业务操作

未经允许不得转载:IT技术网站 » 数据结构之队列and栈总结分析
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载