数据结构之队列

 

正文

像栈一样,队列也是表。使用队列时插入在一端进行而删除则在另一端进行。

队列基本模型

队列的数组实现

如同栈一样,对于队列而言任何表的实现都是合法的。
对于每一个队列数据结构,我们保留一个数组Queue[]以及位置Front和Rear,它们代表队列两端。还要记录实际存在队列中元素的个数Size。

这种实现存在一个潜在问题,经过10入列后,队列就满了,但其中元素并没有10个。简单的解决办法就是只要Front和Rear到达数组尾端,它就又绕回到开头,这叫循环数组的实现。

实现

复制代码
1.#include <stdio.h>
2.#include <stdlib.h>
3.struct QueueRecord;
4.typedef struct QueueRecord *Queue;
5.
6.
7.struct QueueRecord
8.{
9. int Capacity;
10. int Front;
11. int Reaz;
12. int Size;
13. int *Array;
14.};
15.
16.//构造空队列
17.void MakeEmpty(Queue Q)
18.{
19. Q->Size = 0;
20. Q->Front = 1;
21. Q->Reaz=0;
22.}
23.
24.//创建队列
25.void CreateQueue(Queue Q, int MaxQueueSize)
26.{
27. if (Q == NULL)
28. {
29. printf("Error");
30. }
31. else
32. {
33. Q->Array = malloc(sizeof(int)*MaxQueueSize);
34. Q->Capacity = MaxQueueSize - 1;
35. MakeEmpty(Q);
36. }
37.}
38.
39.static int Succ(int Value, Queue Q)
40.{
41. if (++Value == Q->Capacity)
42. Value = 0;
43. return Value;
44.}
45.
46.
47.//入列
48.void Enqueue(int X, Queue Q)
49.{
50. if (Q == NULL)
51. {
52. printf("Error");
53. }
54. else
55. {
56. Q->Size++;
57. Q->Reaz = Succ(Q->Reaz, Q);
58. Q->Array[Q->Reaz] = X;
59. }
60.}
61.//出列
62.void Dequeue(Queue Q)
63.{
64. if (Q == NULL)
65. {
66. printf("Erro");
67. }
68. else
69. {
70. Q->Size--;
71. printf("%d",Q->Array[Q->Front]);
72. Q->Front = Succ(Q->Front, Q);
73. }
74.}
75.
76.void main()
77.{
78. Queue S;
79. S = malloc(sizeof(Queue));
80. CreateQueue(S,10);
81. Enqueue(5, S);
82. Dequeue(S);
83.}
复制代码

 

 

posted on   Mr.Tan&  阅读(263)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示