-
Notifications
You must be signed in to change notification settings - Fork 0
/
普通队列.cpp
114 lines (108 loc) · 2.42 KB
/
普通队列.cpp
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
using namespace std;
template <class T>
class ArrayQueue {
private:
int maxSize; //队列最大容量
int front;
int rear;
int* queue;
public:
ArrayQueue(int size)
{
maxSize = size + 1;
queue = new T[maxSize];
front = rear = 0;
}
~ArrayQueue()
{
delete[] queue;
}
void Clear()
{
front = rear;
}
/*
TODO:1.5-a.入队操作,判断队列是否为满,如果队列已满,则输出打印cout << "队列已满,溢出" << endl;,返回false。
否则,将值item进行入队操作。并返回true
返回值说明:入队成功,返回true,否则返回false
*/
bool EnQueue(const T item)
{
if(front==0){
front=1;
rear=1;
}
if(front%maxSize+1==rear%maxSize){
cout << "队列已满,溢出" << endl;
return false;
}
front++;
queue[front%maxSize]=item;
return true;
}
/*
TODO:1.5-b.返回队头元素,并删除该元素,判断队列是否为空
如果队列为空,则输出打印cout << "队列为空" << endl;并返回false。
否则将队列头元素取出并赋值给item变量并删除该元素,返回true
返回值说明:成功获取队头元素返回true,否则返回false
*/
bool DeQueue(T& item)
{
if(front==rear){
cout << "队列为空" << endl;
return false;
}
item=queue[(rear+1)%maxSize];
rear++;
return true;
}
/*
TODO:1.5-c. 返回队头元素,但不删除,判断队列是否为空
如果队列为空,则打印cout << "队列为空" << endl;并返回false。
否则取出队头元素赋值给item,返回true。
返回值说明:成功获取队头元素,返回true,否则返回false
*/
bool GetFront(T& item)
{
if(front==rear){
cout<<"队列为空"<<endl;
return false;
}
item=queue[(rear+1)%maxSize];
return true;
}
bool IsEmpty()
{
if (front == rear) {
cout << "队列为空" << endl;
return true;
} else {
return false;
}
}
bool IsFull()
{
if ((rear + 1) % maxSize == front) {
cout << "队列已满,溢出" << endl;
return true;
} else {
return false;
}
}
};
int main()
{
int maxsize = 0, iNum = 0, temp1 = 0, temp2 = 0, temp3 = 0;
cin >> maxsize >> iNum >> temp1;
ArrayQueue<int> aq(maxsize);
for (int i = 0; i < iNum; i++) {
aq.EnQueue(i * 3);
}
aq.EnQueue(temp1);
aq.DeQueue(temp2);
cout << "出队:" << temp2 << endl;
aq.GetFront(temp3);
cout << "读取队头元素:" << temp3 << endl;
return 0;
}