数据结构:栈

#ifndef _MYUNTIL_
#define _MYUNTIL_

template<class T>
void ChangeSize1D(T* &a, const int oldSize, const int mewSize);

template<class T>
void ChangeSize1D(T* &a, const int oldSize, const int mewSize)
{
	if(newSize < 0) throw "New length must be >= 0";

	T* temp = new T[newSize];  // 用new操作符动态的创建一个新的数组,将原来的数据一个一个拷贝到新的数组里边,
    int number = min(oldSize,newSize);
	std::copy(a,a+number,temp);
	delete[] a;
	a=temp;

}

#endif _MYUNTIL_

#ifndef _MYSTACK_
#define _MYSTACK_

template<class T>
class MyStack
{
public:
	MyStack(int stackCapacity=10);
	~MyStack();

	bool IsEmpty() const;
	T& Top() const;  // 返回堆栈顶的元素并不删除,
	void Push(const T& item); // 放一个元素到堆栈中,
	void Pop();  // pop是把堆栈中栈顶的数据删除,
private:
	T *stack;  // 这是一个指针,
	int top; // top记录栈顶在哪里,
	int capacity;  // 容量数组有多大,
};

template<class T>
void MyStack<T>::Pop()
{
	if(IsEmpty()) throw "Stack is empty. Connot delete,";
	stack[top--].~T(); // 这个是重点,
}

template<class T>
inline bool MyStack<T>::IsEmpty() const // inline这是一种类元的表示,
{
	return top == -1;
}

template<class T>
inline T& MyStack<T>::Top() const
{
	if(IsEmpty()) throw "Stack is empty";
	return stack[top];
}

template<class T>
MyStack<T>::MyStack(int stackCapacity):capacity(stackCapacity)
{
	if(capacity < 1) throw "stack capacity must be > 0";
	stack = new T[capacity];
	top = -1;
}

template<class T>
MyStack<T>::~MyStack()
{
	delete [] stack;
}

template<class T>
void MyStack<T>::Push(const T& item)
{
	stack[++top] = item;
}

#endif _MYSTACK_

#include <iostream>
#include "MyUtil.h"
#include "MyStack.h"
#include <string>

using namespace std;

class Dog
{

};

int main()
{
	MyStack<Dog> dogstack;
	MyStack<string> stringstack;

	MyStack<int> st;
	st.Push(6);
	st.Push(3);
	st.Push(12);
	st.Push(31);

	cout << st.Top() << endl;
	st.Pop();
	cout << st.Top() << endl;

	cout<< "xiao cui" << endl;
	return 0;
}

你可能感兴趣的:(数据结构:栈)