c#队列取值_C# 队列

1 Queue2

3 usingSystem;4 usingSystem.Collections.Generic;5 usingSystem.Linq;6 usingSystem.Text;7 usingSystem.Threading;8

9 namespaceDataStructure10 {11 ///

12 ///队列接口13 ///

14 interface IQueue

15 {16 void EnQueue(T elem); //入队列操作

17 T DeQueue(); //出队列操作

18 T GetFront(); //取对头元素

19 int GetLength(); //求队列的长度

20 bool IsEmpty(); //判断队列是否为空

21 void Clear(); //清空队列

22 bool IsFull(); //判断队列是否为满

23 }24

25 ///

26 ///银行队列接口27 ///

28 interface IBankQueue : IQueue

29 {30 int GetCallnumber(); //获取服务号码

31 }32

33

34 ///

35 ///循环顺序队列36 ///

37 ///

38 class CSeqQueue : IQueue

39 {40 private int maxsize; //循环顺序队列的容量

41 private T[] data; //数组,用于存储循环顺序队列中的数据元素

42 private int front; //指示最近一个已经离开队列的元素所占有的位置 循环顺序队列的对头

43 private int rear; //指示最近一个进入队列的元素的位置 循环顺序队列的队尾

44

45 public T this[intindex]46 {47 get { returndata[index]; }48 set { data[index] =value; }49 }50

51 //容量属性

52 public intMaxsize53 {54 get { returnmaxsize; }55 set { maxsize =value; }56 }57

58 //对头指示器属性

59 public intFront60 {61 get { returnfront; }62 set { front =value; }63 }64

65 //队尾指示器属性

66 public intRear67 {68 get { returnrear; }69 set { rear =value; }70 }71

72 publicCSeqQueue()73 {74

75 }76

77 public CSeqQueue(intsize)78 {79 data = newT[size];80 maxsize =size;81 front = rear = -1;82 }83

84 //判断循环顺序队列是否为满

85 public boolIsFull()86 {87 if ((front == -1 && rear == maxsize - 1) || (rear + 1) % maxsize ==front)88 return true;89 else

90 return false;91 }92

93 //清空循环顺序列表

94 public voidClear()95 {96 front = rear = -1;97 }98

99 //判断循环顺序队列是否为空

100 public boolIsEmpty()101 {102 if (front ==rear)103 return true;104 else

105 return false;106 }107

108 //入队操作

109 public voidEnQueue(T elem)110 {111 if(IsFull())112 {113 Console.WriteLine("Queue is Full !");114 return;115 }116 rear = (rear + 1) %maxsize;117 data[rear] =elem;118 }119

120 //出队操作

121 publicT DeQueue()122 {123 if(IsEmpty())124 {125 Console.WriteLine("Queue is Empty !");126 return default(T);127 }128 front = (front + 1) %maxsize;129 returndata[front];130 }131

132 //获取对头数据元素

133 publicT GetFront()134 {135 if(IsEmpty())136 {137 Console.WriteLine("Queue is Empty !");138 return default(T);139 }140 return data[(front + 1) % maxsize];//front从-1开始

141 }142

143 //求循环顺序队列的长度

144 public intGetLength()145 {146 return (rear - front + maxsize) %maxsize;147 }148 }149

150 ///

151 ///链队列结点类152 ///

153 ///

154 class QueueNode

155 {156 private T data; //数据域

157 private QueueNode next; //引用域

158

159 public QueueNode(T val, QueueNodep)160 {161 data =val;162 next =p;163 }164

165 public QueueNode(QueueNodep)166 {167 next =p;168 }169

170 publicQueueNode(T val)171 {172 data =val;173 next = null;174 }175

176 publicQueueNode()177 {178 data = default(T);179 next = null;180 }181

182 //数据域属性

183 publicT Data184 {185 get { returndata; }186 set { data =value; }187 }188

189 //引用域属性

190 public QueueNodeNext191 {192 get { returnnext; }193 set { next =value; }194 }195 }196

197 ///

198 ///链队列类199 ///

200 ///

201 class LinkQueue : IQueue

202 {203 private QueueNode front; //队列头指示器

204 private QueueNode rear; //队列尾指示器

205 private int size; //队列结点个数206

207 //队列属性

208 public QueueNodeFront209 {210 get { returnfront; }211 set { front =value; }212 }213

214 public QueueNodeRear215 {216 get { returnrear; }217 set { rear =value; }218 }219

220 public intSize221 {222 get { returnsize; }223 set { size =value; }224 }225

226 //初始化链队列

227 publicLinkQueue()228 {229 front = rear = null;230 size = 0;231 }232

233 public intGetLength()234 {235 returnsize;236 }237

238 public voidClear()239 {240 front = rear = null;241 size = 0;242 }243

244 public boolIsEmpty()245 {246 if ((front == rear) && (size == 0))247 return true;248 else

249 return false;250

251 }252

253 //链队列没有容量限制 返回false

254 public boolIsFull()255 {256 return false;257 }258

259 //入队操作

260 public voidEnQueue(T item)261 {262 QueueNode q = new QueueNode(item);263 if(IsEmpty())264 {265 front =q;266 rear =q;267 }268 else

269 {270 rear.Next =q;271 rear =q;272 }273 ++size;274 }275

276 //出对操作

277 publicT DeQueue()278 {279 if(IsEmpty())280 {281 Console.WriteLine("Queue is Empty !");282 return default(T);283 }284 QueueNode p =front;285 front =front.Next;286

287 if (front == null)288 {289 rear = null;290 }291 --size;292 returnp.Data;293 }294

295 //获取链队列头结点的值

296 publicT GetFront()297 {298 if(IsEmpty())299 {300 Console.WriteLine("Queue is Empty !");301 return default(T);302 }303 returnfront.Data;304 }305

306 }307

308

309 ///

310 ///银行叫号链队列类311 ///

312 class LinkBankQueue : LinkQueue, IBankQueue313 {314 private intcallnumber;315

316 public intCallnumber317 {318 get { returncallnumber; }319 set { callnumber =value; }320 }321

322 //获取服务号码

323 public intGetCallnumber()324 {325 if ((IsEmpty()) && callnumber == 0)326 {327 callnumber = 1;328 }329 else

330 callnumber++;331 returncallnumber;332 }333 }334

335 ///

336 ///银行叫号顺序队列类337 ///

338 class CSeqBankQueue : CSeqQueue, IBankQueue339 {340 private int callnumber; //记录系统自动产生的新来顾客的服务号码

341

342 public intCallnumber343 {344 get { returncallnumber; }345 set { callnumber =value; }346 }347

348 publicCSeqBankQueue()349 {350

351 }352

353 public CSeqBankQueue(intsize)354 : base(size)355 {356

357 }358

359 //获得服务号码

360 public intGetCallnumber()361 {362 if ((IsEmpty()) && callnumber == 0)363 {364 callnumber = 1;365 }366 else

367 {368 callnumber++;369 }370 returncallnumber;371 }372 }373

374 ///

375 ///服务窗口类376 ///

377 classServiceWindow378 {379 IBankQueue bankQ;380

381 //服务队列属性

382 publicIBankQueue BankQ383 {384 get { returnbankQ; }385 set { bankQ =value; }386 }387

388 public voidService()389 {390 while (true)391 {392 Thread.Sleep(10000);393 if (!bankQ.IsEmpty())394 {395 Console.WriteLine();396 lock(bankQ)397 {398 Console.WriteLine("请{0}号到{1}号窗口!", bankQ.DeQueue(), Thread.CurrentThread.Name);399 }400 }401 }402 }403 }404

405 classQueue406 {407

408 static voidMain()409 {410 IBankQueue bankQueue = null;411 Console.WriteLine("请选择存储结构的类型:1.顺序队列 2.链队列:");412 char selectFlag =Convert.ToChar(Console.ReadLine());413 switch(selectFlag)414 {415 /*初始化顺序队列*/

416 case '1':417 int count; //接受循环顺序队列的容量

418 Console.WriteLine("请输入队列可容纳的人数:");419 count =Convert.ToInt32(Console.ReadLine());420 bankQueue = newCSeqBankQueue(count);421 break;422 /*初始化链队列*/

423 case '2':424 bankQueue = newLinkBankQueue();425 break;426

427 }428 int windowcount = 4; //设置银行柜台的服务窗口数

429

430 ServiceWindow[] sw = newServiceWindow[windowcount];431 Thread[] swt = newThread[windowcount];432 for (int i = 0; i < windowcount; i++)433 {434 sw[i] = newServiceWindow();435 sw[i].BankQ =bankQueue;436 swt[i] = new Thread(newThreadStart(sw[i].Service));437 swt[i].Name = "" + (i + 1);438 swt[i].Start();439 }440 while (true)441 {442 Console.WriteLine("请点击触摸屏获取号码:");443 Console.ReadLine();444

445 intcallnumber;446 if (!bankQueue.IsFull())447 {448 callnumber =bankQueue.GetCallnumber();449 Console.WriteLine("您的号码是:{0},您前面有{1}位,请等待!", callnumber, bankQueue.GetLength());450 bankQueue.EnQueue(callnumber);451 }452 else

453 Console.WriteLine("现在业务繁忙,请稍后再来!");454 Console.WriteLine();455 }456 }457 }458 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中小企业项目的痛VS感人IT团队

早上&#xff0c;接到客户电话&#xff0c;dynamics CRM不能用了&#xff0c;此客户从开始安装程序开始二次开发期间&#xff0c;因电源问题导致服务器多次意外断电&#xff0c;至今也不加UPS电源。前几次&#xff0c;都不是很严重&#xff0c;服务器没有大量文件损坏&#xff…

java的linux执行的shell

2019独角兽企业重金招聘Python工程师标准>>> #!/bin/sh #该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用&#xff0c; #也可以作为启动java程序的独立脚本来使用。 # # #警告!!!&#xff1a;该脚本stop部分使用系统kill命…

统计 Github 2021 贡献过的开源项目

统计一下 2021 贡献过的开源项目Intro新的一年的开始了&#xff0c;有很多总结和回顾还没有做&#xff0c;今天就盘点一下贡献过的开源项目吧~起初想着手动地通过 Github Dashboard 来统计但是感觉有些麻烦&#xff0c;还得一个个地复制标题链接等&#xff0c;好麻烦&#xff0…

linux c之<setjmp.h>使用总结

1、爆代码 #include<setjmp.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h>void f1(int, int, int, int); void f2(void);static jmp_buf jmpbuffer; static int globval; int i = 4; int main(void) {int autoval;register i…

Unit Three-Program test

编程练习——《C Primer Plus》 Unit Three-Program test Program_test_5 /* Program Test :一年大约有 3.15610^7秒。编写一个程序&#xff0c;提示用户输入年龄&#xff0c;然后显示该年龄对应的秒数。 */ #include<stdio.h> int main(void) {int i_age;double d…

IntentService使用

说实话&#xff0c;对于这个类在我实际工作中并没有用到过&#xff0c;通常也只是用了它的父类Service&#xff0c;通过官方文档可以看出类的层次结构: 而在今年的一次面试当中&#xff0c;有个面试官提起了它&#xff0c;所以虽说目前还没有真实在项目中用它&#xff0c;但是有…

如何使用 Barracuda 防火墙设置/保护 Azure 应用程序

&#xfeff;&#xfeff;如果某企业在 Windows Azure 上托管某个应用程序&#xff0c;该应用程序会在某个特定时间暴露到 Internet&#xff0c;以用于商业用途。公共 Internet 带来客户的同时也带来了攻击者。 Tim Omta 发表的新博客文章中介绍了如何使用 PaaS 应用程序之前的…

Git 简单命令行指令

为什么80%的码农都做不了架构师&#xff1f;>>> 这些git命令来自gitlab的简单提示&#xff0c;挺人性化&#xff0c;记录下。 Git 全局设置 git config --global user.name "yourname" git config --global user.email "yournamemail.com" 创…

python创_Python创建Windows 服务

Python 写windows 服务&#xff0c;需要使用 pywin32包。直接上代码&#xff1a;#encodingutf8Created on 2014-7-1author: wangmengnanimport osimport sysimport win32serviceutilimport win32serviceimport win32eventclass PythonService(win32serviceutil.ServiceFramewor…

C# 值类型的局限性

如果程序希望使用一个值类型实例来进行同步&#xff0c;通常都会是错误(bug)。但运行时应该认为这是非法并抛出异常吗?在下面的代码示例中如果两个不同的线程同时调用同一个Counter 实例的Increment 方法&#xff0c;将会发生什么?class Counter{private int _i;public int I…

linux之网络编程ICMP校验算法

1、ICMP校验算法代码 unsigned short cal_chksum(unsigned short *addr,int len) { int nleft len; int sum 0; unsigned short *w addr; unsigned short answer 0; /*把ICMP报头二进制数据以2字节为单位累加起来*/ while(nleft > 1) { sum *w; nle…

第4章 字符串和格式化输入/输出

学习笔记——《C Primer Plus》 第4章 字符串和格式化输入/输出4.1 前导程序4.2 字符串简介4.2.1 char 类型数组和 null 字符4.2.2 使用字符串4.2.3 strlen() 函数4.3 常量和 C 预处理器4.3.1 符号常量1. 使用**符号常量**的好处:2. 创建符号常量4.3.2 const 限定符4.3.3 转换说…

关于visual studio类视图和资源视图不显示类和资源的问题

今天因为要上一个项目&#xff0c;需要用到SSIS采集包&#xff0c;就打开以前做好的包来看了下&#xff0c;结果发现解决方案资源管理器不显示解决方案内容了。没有办法。百度不到&#xff0c;重装吧&#xff0c;再打开仍然不行&#xff0c;还是不能显示内容。后来在msdn论坛上…

ANT简明教程[转载]

一、ant关键元素 1. project元素 project 元素是 Ant 构件文件的根元素&#xff0c; Ant 构件文件至少应该包含一个 project 元素&#xff0c;否则会发生错误。在每个 project 元素下&#xff0c;可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。 1) name…

ios之第一个程序Hello word, I am chenyu !

1、下载Xcode 个人建议网上下载Xcode&#xff0c;快些&#xff0c;特么再应用商店下载像日了狗一样&#xff0c;还要填写资料&#xff0c; 最后资料没有写好&#xff0c;无效字符。2、新建项目 下载好了Xcode&#xff0c;一步一步往下点就行&#xff0c;然后create 项目然后找m…

小博老师解析Java核心技术 ——JSwing绘图技术

2019独角兽企业重金招聘Python工程师标准>>> [引言] 我们在学习Java编程的时候&#xff0c;如果需要开发客户端窗体类型的程序&#xff0c;可以使用JDK中的awt和swing库。本文开始小博老师就继续为大家演示Java窗体编程中的绘图技术&#xff0c;今天主要讲解绘图技术…

.NET6之MiniAPI(十三):健康检查

程序员开发程序&#xff0c;是“生”的过程&#xff0c;运维人员负责日常运维&#xff0c;是“养”的过程&#xff0c;在养的过程&#xff0c;运维人员希望在第一时间了解程序的状况&#xff0c;健康检查&#xff0c;是最基础的手段。var builder WebApplication.CreateBuilde…

npm 安装less插件_node+npm+webpack+less安装

本节主要内容&#xff1a;什么是LESS为什么选择LESS安装webpack编译环境什么是LessLESS是前端css样式预处理器中的一种&#xff0c;和它相同类型的语言还有Sass以及Stylus。它是css语言的扩展&#xff0c;增加了变量、混合、函数、继承等多种语法&#xff0c;让css样式的编写变…

UVa 11346 - Probability

纯粹数学题&#xff0c;推公式吧。注意边界处理精度控制就可以了。 #include <cstdio> #include <cmath> #define EPS 1e-7 int main() {int T; scanf("%d", &T);while (T--){double a, b, S; scanf("%lf %lf %lf", &a, &b, &…

linux之用 grep -r 关键字 快速搜索在目录下面的含有关键字的文件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程 1、快速搜索在目录下面的含有关键字的文件 我们采用下面命令cd directoriesgrep -r 关键字2、搜索结果