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

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

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

template <typename T>
class MyStack
{
public:
	MyStack(int size);			//创建并初始化栈
	virtual ~MyStack();			//销毁栈
	bool StackEmpty();			//判空栈
	bool StackFull();			//判满栈
	void ClearStack();			//清空栈
	int StackLength();			//栈中已有元素个数
	bool push(T element);			//入栈
	bool pop(T &element);		//出栈
	void StackTraverse(bool isfromButtom);			//遍历栈
private:
	T *m_pBuffer;			//栈空间指针
	int m_iSize;			//栈空间大小
	int m_iTop;			//栈顶坐标
};

template <typename T>
MyStack<T>::MyStack(int size)
{
	m_iSize = size;
	m_iTop = 0;
	m_pBuffer = new T(m_iSize);
}

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

template <typename T>
bool MyStack<T>::StackEmpty()
{
	if (0 == m_iTop)
	{
		return true;
	}
	return false;
}

template <typename T>
bool MyStack<T>::StackFull()
{
	if (m_iTop == m_iSize)
	{
		return true;
	}
	return false;
}

template <typename T>
void MyStack<T>::ClearStack()
{
	m_iTop = 0;
}

template <typename T>
int MyStack<T>::StackLength()
{
	return m_iTop;
}

template <typename T>
bool MyStack<T>::push(T element)
{
	if (StackFull())
	{
		return false;
	}
	m_pBuffer[m_iTop] = element;
	m_iTop++;
	return true;
}

template <typename T>
bool MyStack<T>::pop(T &element)
{
	if (StackEmpty())
	{
		return false;
	}
	else
	{
		/*--m_iTop;
		element = m_pBuffer[m_iTop];*/
		element = m_pBuffer[--m_iTop];
		return true;
	}
}


template <typename T>
void MyStack<T>::StackTraverse(bool isfromButtom)
{
	if (false == isfromButtom)			//从下往上遍历
	{
		for (int i = 0; i < m_iTop; i++)
		{
			cout << m_pBuffer[i] << ",";
		}
	}
	else             //从上往下遍历
	{
		for (int j = m_iTop - 1; j >= 0; j--)
		{
			cout << m_pBuffer[j] << ",";
		}
	}
}
  • 主函数demo.cpp
#include<iostream>
#include<string>
#include "MyStack.h"
using namespace std;

int main()
{
	MyStack<int>* p = new MyStack<int>(5);
	p->push(1);
	p->push(2);
	p->push(3);
	p->push(4);
	p->push(5);
	//int e = 0;
	//p->pop(e);
	//cout << e << endl;
	//p->ClearStack();
	if (p->StackEmpty())
	{
		cout << "栈已空" << endl;
	}
	if(p->StackFull())
	{
		cout << "栈已满" << endl;
	}

	p->StackTraverse(false);
	return 0;
}
发布了36 篇原创文章 · 获赞 43 · 访问量 1826

猜你喜欢

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