算法与数据结构基础6:C++队列的简单实现

队列也是基于队列,弄懂了队列,队列就很好懂了

// Queue.h

#include <cstdio>
#include <cassert>
#include <iostream>

using namespace std;

class Queue
{
public:
// **************************************************************************
// 类的4大函数:构造函数、拷贝构造函数、重载赋值运算符、析构函数
// **************************************************************************
Queue();
Queue(const Queue &Queue);
Queue& operator=(const Queue &Queue);
~Queue();

// **************************************************************************
// 增删改查
// **************************************************************************
int Pop();
void Push(const int& data);

unsigned short Size();
bool IsEmpty();
void PrintQueue();

private:
void Free();

private:
typedef struct Node{
Node(int d):data(d),next(NULL){}
int data;
struct Node* next;
}Node;

Node* m_head;
Node* m_tail;/* 这个变量加得有点鸡肋,最初是想用来操作链表尾,发现只有插入的时候能用,删除的时候用不了,由于没有前指针 */
unsigned short m_size;
};

// **************************************************************************
// 私有方法
// **************************************************************************
void Queue::Free()
{
if(m_head){
Node* tmp = NULL;
while(m_head){
tmp = m_head;
m_head = m_head->next;
delete tmp;
}
}
m_head = NULL;
m_tail = NULL;
m_size = 0;
}

// **************************************************************************
// 类的4大函数:构造函数、拷贝构造函数、重载赋值运算符、析构函数
// **************************************************************************
Queue::Queue()
{
m_head = NULL;
m_tail = NULL;
m_size = 0;
}

Queue::Queue(const Queue &Queue)
{
m_head = NULL;
m_tail = NULL;

m_size = Queue.m_size;

if(Queue.m_head){
Node* tmp = Queue.m_head;
Node* q = NULL;
while(tmp){
Node* node = new Node(tmp->data);
if(!m_head){
m_head = node;
q = m_head;
}
else{
q->next = node;
q = node;
}
tmp = tmp->next;
}
m_tail = q;
}
else{
m_head = NULL;
m_tail = NULL;
}
}

Queue& Queue::operator=(const Queue &Queue)
{
Free();

m_size = Queue.m_size;

if(Queue.m_head){
Node* tmp = Queue.m_head;
Node* q = NULL;
while(tmp){
Node* node = new Node(tmp->data);
if(!m_head){
m_head = node;
q = m_head;
}
else{
q->next = node;
q = node;
}

tmp = tmp->next;
}
m_tail = q;
}
else{
m_head = NULL;
m_tail = NULL;
}

return *this;
}

Queue::~Queue()
{
if (m_head){
Node* tmp = m_head;
while (tmp){
m_head = m_head->next;
delete tmp;
tmp = m_head;
}
}
m_head = NULL;
m_tail = NULL;
}

// **************************************************************************
// 增删改查
// **************************************************************************
void Queue::Push(const int& data)
{
Node* tmp = new Node(data);
if (!m_head) {
m_head = tmp;
m_tail = tmp;
}
else{
tmp->next = m_head;
m_head = tmp;
}
++m_size;
}

int Queue::Pop()
{
assert(m_size > 0);

int val = 0;
Node *cur, *pri;
if (!m_head->next){
val = m_head->data;
delete m_head;
m_head = NULL;
m_tail = NULL;
m_size = 0;
}
else{
cur = m_head;
while (cur->next->next){
cur = cur->next;
}
pri = cur;
m_tail = cur;
cur = cur->next;
pri->next = NULL;
val = cur->data;
delete cur;
cur = NULL;

–m_size;
}

return val;
}

unsigned short Queue::Size()
{
return m_size;
}

bool Queue::IsEmpty()
{
return (m_size == 0);
}

void Queue::PrintQueue()
{
cout << "size : " << m_size << " , content : ";
if (m_head){
Node* tmp = m_head;
while (tmp){
cout << tmp->data << " -> ";
tmp = tmp->next;
}
}

cout << "NULL" << endl;
}

// main.cpp

// test for Queue
#include "Queue.h"
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
Queue queue;
for (int i = 1; i < 5; ++i){
queue.Push(i);
}
queue.PrintQueue();

Queue queueCopy(queue);
queueCopy.PrintQueue();

Queue queueAssig;
queueAssig = queue;
queueAssig.PrintQueue();

int pop = queue.Pop();
cout << "pop:" << pop << endl;
queue.PrintQueue();

system("pause");

return 0;
}

// 输出截图

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 算法与数据结构基础6:C++队列的简单实现

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡