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

IT技术2年前 (2022)发布 投稿用户
0

一、前语:

数据结构中行列和栈也是常见的两个数据结构,行列和栈在实际运用场景上也是相得益彰的,下面简单总结一下,如有不对之处,多多指点沟通,谢谢。
二、行列简介
行列顾名思义便是排队的意思,依据我们的实际生活不难理解,排队便是有先后顺序,先到先得,其实在程序数据结构中的行列其作用也是相同,及先进先出。
行列大概有如下一些特性:
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、其他契合先进后出准则的业务操作

© 版权声明
好牛新坐标 广告
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章