C++队列-顺序存储

SqQueue.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#pragma once
#include<iostream>
using namespace std;

#define MAXSIZE 10

class SqQueue
{
private:
int data[MAXSIZE];
int front, rear;
public:
SqQueue();
SqQueue(int array[], int n);

bool QueueEmpty(); // 判断是否为空,为空返回true
bool QueueFull(); // 判断队列是否已满

void EnQueue(int e);// 入队操作
bool DeQueue(int &e);// 出队操作,通过e返回数据

void ShowAll();

};

SqQueue.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
#include "SqQueue.h"


SqQueue::SqQueue()
{
// rear指向的是下一次存储数据的位置
front = rear = 0; // 对头指针和队尾地址,如果队头、队尾相同,则 空队列

}

SqQueue::SqQueue(int array[], int n)
{
front = rear = 0;
for (int i = 0; i < n; i++)
{
EnQueue(array[i]);
}
}

// 判空
bool SqQueue::QueueEmpty()
{
return front == rear;
}

// 判断队列是否已满
bool SqQueue::QueueFull()
{
if ((rear + 1) % MAXSIZE == front) // 牺牲掉一个存储单元,当队头指针和队尾指针相邻时 队列 已满
return true;
return false;
}


void SqQueue::EnQueue(int e)
{
if (QueueFull())
return; // 队列已满

data[rear] = e;
rear = (rear + 1) % MAXSIZE;
}


bool SqQueue::DeQueue(int &e)
{
if (QueueEmpty())
return false;

e = data[front];
front = (front + 1) % MAXSIZE;
return true;
}

void SqQueue::ShowAll()
{
if (QueueEmpty()) // 队列为空
return ;

int i = front;
int flag = true;
while(flag)
{
cout << data[i] << " " ;
i = (i + 1) % MAXSIZE;
if (i == rear)
flag = false;
}
cout << endl;

}

main.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
#include<iostream>
using namespace std;
#include"SqQueue.h"

int main()
{
int n = 5;
int array[] = { 1,2,3,4,5 };
SqQueue queue(array, n);

queue.ShowAll();

queue.EnQueue(100);
queue.ShowAll();
int e;

for (int i = 0; i < 6; i++)
{
queue.DeQueue(e);
cout << "出列元素:" << e << endl;;
}


if (queue.QueueEmpty())
cout << "队列为空" << endl;


for (int i = 100; i < 120; i++)
queue.EnQueue(i);

queue.ShowAll();


return 0;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!