您的位置:首页 > 理论基础 > 数据结构算法

数据结构:栈

2016-04-06 20:36 162 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: