学习C++数据结构(队列的实现)

在学习数据结构的时候自己纯手打的实现代码,放到平台上来方便自己日后回顾,也可以给其他想学习的朋友一点小小的参考。
(代码思路来源于慕课网的c++数据结构课程)

  • MyQueue.h
#pragma once
#include<stdlib.h>
#include<iostream>
#include<string>
using namespace std;

template <typename T>
class MyQueue
{
public:
	MyQueue(int queueCapacity);			//创建队列
	~MyQueue();			//销毁队列
	void ClearQueue();			//清空队列
	bool QueueEmpty() const;				//判空队列;不可修改数据成员用const修饰
	int QueueLength() const;					//队列长度
	bool EnQueue(T element);			//入队
	bool DeQueue(T& element);			//出队
	void QueueTraverse();			//遍历队列
	bool QueueFull();			//队列判满
private:
	T* m_pQueue;			//队列数组指针
	int m_QueueLen;			//队列长度
	int m_QueueCapacity;			//队列容量
	int m_iHead;			//队头索引
	int m_iTail;			//队尾索引
};

template <typename T>
MyQueue<T>::MyQueue(int queueCapacity)
{
	m_QueueCapacity = queueCapacity;
	m_iHead = 0;
	m_iTail = 0;
	m_QueueLen = 0;
	m_pQueue = new T[m_QueueCapacity];
}

template <typename T>
MyQueue<T>::~MyQueue()
{
	delete []m_pQueue;
	m_pQueue = NULL;
}

template <typename T>
void MyQueue<T>::ClearQueue()
{
	m_iHead = 0;
	m_iTail = 0;
	m_QueueLen = 0;
}

template <typename T>
bool MyQueue<T>::QueueEmpty() const
{
	return m_QueueLen == 0 ? true : false;
}

template <typename T>
int MyQueue<T>::QueueLength() const
{
	return m_QueueLen;
}

template <typename T>
bool MyQueue<T>::QueueFull()
{
	if (m_QueueLen == m_QueueCapacity)
	{
		return true;
	}
	return false;
}

template <typename T>
bool MyQueue<T>::EnQueue(T element)
{
	if (!QueueFull())
	{
		m_QueueLen++;
		m_pQueue[m_iTail] = element;
		m_iTail++;
		m_iTail = m_iTail % m_QueueCapacity;
		return true;
	}
	else
	{
		return false;
	}
}

template <typename T>
bool MyQueue<T>::DeQueue(T &element)
{
	if (QueueEmpty())
	{
		return false;
	}
	else
	{
		element = m_pQueue[m_iHead];
		m_iHead++;
		m_iHead = m_iHead % m_QueueCapacity;
		m_QueueLen--;
		return true;
	}
}

template <typename T>
void MyQueue<T>::QueueTraverse()
{
	for (int i = m_iHead;  i < m_iHead + m_QueueLen; i++)
	{
		cout << m_pQueue[i % m_QueueLen] << endl;
	}
}
  • 主函数demo.cpp
#include<string>
#include<iostream>
#include "MyQueue.h"
using namespace std;

int main()
{
	MyQueue<string>* q = new MyQueue<string>(4);
	q->EnQueue("a");
	q->EnQueue("b");
	q->EnQueue("c");
	//q->EnQueue(4);
	if (q->QueueFull())
	{
		cout << "队列已满" << endl;
	}
	if (q->QueueEmpty())
	{
		cout << "队列已空" << endl;
	}
	//q->ClearQueue();
	q->QueueTraverse();
	return 0;
}
发布了36 篇原创文章 · 获赞 43 · 访问量 1827

猜你喜欢

转载自blog.csdn.net/weixin_45224869/article/details/104517468