队列为循环队列,使用循环队列的原因是:防止假溢出。
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4![]()
5
namespace 队列应用
6
{
7
class Program
8
{
9
public interface IQueue<T>
10
{
11
//求队列的长度
12
int GetLength();
13
//判断队列是否为空
14
bool IsEmpty();
15
//清空队列
16
void Clear();
17
//入队
18
void In(T item);
19
//出队
20
T Out();
21
//取对头元素
22
T GetFront();
23
}
24
public class SeqQueue<T> : IQueue<T>
25
{
26
//循环顺序队列的容量
27
private int maxsize;
28
//存储顺序队列中的值
29
private T[] data;
30
//队头
31
private int front;
32
//队尾
33
private int rear;
34![]()
35
//索引器
36
public T this[int index]
37
{
38
get
39
{
40
return data[index];
41
}
42
set
43
{
44
data[index] = value;
45
}
46
}
47
//容量属性
48
public int Maxsize
49
{
50
get
51
{
52
return maxsize;
53
}
54
set
55
{
56
maxsize = value;
57
}
58
}
59
//队头属性
60
public int Front
61
{
62
get
63
{
64
return front;
65
}
66
set
67
{
68
front = value;
69
}
70
}
71
//队尾属性
72
public int Rear
73
{
74
get
75
{
76
return rear;
77
}
78
set
79
{
80
rear = value;
81
}
82
}
83
//构造器
84
public SeqQueue(int size)
85
{
86
data=new T[size];
87
maxsize = size;
88
front = rear = -1;
89
}
90
//求长度
91
public int GetLength()
92
{
93
return (rear - front + maxsize) % maxsize;
94
}
95
//清空
96
public void Clear()
97
{
98
front = rear = -1;
99
}
100
//判断队列是否为空
101
public bool IsEmpty()
102
{
103
if (front == rear)
104
{
105
return true;
106
}
107
else
108
{
109
return false;
110
}
111
112
}
113
//判断队列是否已满
114
public bool IsFull()
115
{
116
if ((rear + 1) % maxsize == front)
117
{
118
return true;
119
}
120
else
121
{
122
return false;
123
}
124
}
125
//入队
126
public void In(T item)
127
{
128
if (IsFull())
129
{
130
Console.WriteLine("队列已满!");
131
return;
132
}
133
data[++rear] = item;
134
}
135
//出队
136
public T Out()
137
{
138
T tmp=default(T);
139
if (IsEmpty())
140
{
141
Console.WriteLine("队列是空的!");
142
return tmp;
143
}
144
tmp=data[++front];
145
return tmp;
146
}
147![]()
148
//获取队头元素
149
public T GetFront()
150
{
151
if (IsEmpty())
152
{
153
Console.WriteLine("队列是空的!");
154
return default(T);
155
}
156
return data[front+1];
157
}
158
}
159
static void Main(string[] args)
160
{
161
SeqQueue<int> queue = new SeqQueue<int>(10);
162
int[] str = new int[] {1,2,3,4,5,6};
163
for (int i = 0; i < str.Length; i++)
164
{
165
queue.In(str[i]);
166
}
167
Console.WriteLine(queue.GetFront());
168
}
169
}
170
}
171![]()
using System;2
using System.Collections.Generic;3
using System.Text;4

5
namespace 队列应用6
{7
class Program8
{9
public interface IQueue<T>10
{ 11
//求队列的长度12
int GetLength();13
//判断队列是否为空14
bool IsEmpty();15
//清空队列16
void Clear();17
//入队18
void In(T item);19
//出队20
T Out();21
//取对头元素22
T GetFront();23
}24
public class SeqQueue<T> : IQueue<T>25
{ 26
//循环顺序队列的容量27
private int maxsize;28
//存储顺序队列中的值29
private T[] data;30
//队头31
private int front;32
//队尾33
private int rear;34

35
//索引器36
public T this[int index]37
{38
get39
{ 40
return data[index];41
}42
set43
{44
data[index] = value;45
}46
}47
//容量属性48
public int Maxsize49
{50
get 51
{52
return maxsize;53
}54
set55
{56
maxsize = value;57
}58
}59
//队头属性60
public int Front61
{62
get63
{64
return front;65
}66
set67
{68
front = value;69
}70
}71
//队尾属性72
public int Rear73
{74
get75
{76
return rear;77
}78
set79
{80
rear = value;81
}82
}83
//构造器84
public SeqQueue(int size)85
{ 86
data=new T[size];87
maxsize = size;88
front = rear = -1;89
}90
//求长度91
public int GetLength()92
{93
return (rear - front + maxsize) % maxsize;94
}95
//清空96
public void Clear()97
{98
front = rear = -1;99
}100
//判断队列是否为空101
public bool IsEmpty()102
{103
if (front == rear)104
{105
return true;106
}107
else108
{109
return false;110
}111
112
}113
//判断队列是否已满114
public bool IsFull()115
{116
if ((rear + 1) % maxsize == front)117
{118
return true;119
}120
else121
{122
return false;123
}124
}125
//入队126
public void In(T item)127
{128
if (IsFull())129
{130
Console.WriteLine("队列已满!");131
return;132
}133
data[++rear] = item;134
}135
//出队136
public T Out()137
{ 138
T tmp=default(T);139
if (IsEmpty())140
{141
Console.WriteLine("队列是空的!");142
return tmp;143
}144
tmp=data[++front];145
return tmp;146
}147

148
//获取队头元素149
public T GetFront()150
{151
if (IsEmpty())152
{153
Console.WriteLine("队列是空的!");154
return default(T);155
}156
return data[front+1];157
}158
}159
static void Main(string[] args)160
{161
SeqQueue<int> queue = new SeqQueue<int>(10);162
int[] str = new int[] {1,2,3,4,5,6};163
for (int i = 0; i < str.Length; i++)164
{165
queue.In(str[i]); 166
}167
Console.WriteLine(queue.GetFront());168
}169
}170
}171



浙公网安备 33010602011771号