#include<iostream>
using namespace std;
template<typename T>
class Stack
{
public:
Stack()
{
capacity = 1;
elements = new T[capacity];
size = 0;
}
Stack(const Stack& stack)
{
size = stack.size;
capacity = stack.capacity;
elements = new T[stack.capacity];
for (int i = 0; i < size; i++)
{
elements[i] = stack.elements[i];
}
}
~Stack()
{
delete[] elements;
}
bool isEmpty()
{
return size == 0;
}//判断栈是否为空
T getPeek()
{
return elements[size - 1];
}//获取第一个即最后一个输入
void PushBack(T a)
{
HaveCapacity();
elements[size] = a;
size++;
}
T PopBack()
{
size--;
return elements[size];
}
int getSize()
{
return size;
}
T at(int a)//返回第a个值
{
return elements[a--];
}
void Empty()
{
size = 0;
}//栈清零
private:
T* elements;
int capacity, size = 0;
void HaveCapacity()//确保栈中的容量够大,不够就扩大数据范围两倍
{
if (size >= capacity)
{
T* temp;
temp = elements;
capacity = 2 * size;
elements = new T[size * 2];
for (int i = 0; i < size; i++) { elements[i] = temp[i]; }
delete[] temp;
}
}
};
/*测试程序*/
int main()
{
Stack<int> stack1;
for (int i = 0; i < 10; i++)
{
stack1.PushBack(i);
}
cout << stack1.isEmpty() << endl;//输出为0则为不空,1为空
cout << stack1.getSize() << endl;
for (int i = 0; i < stack1.getSize(); i++)
{
cout << stack1.at(i);
}
cout << endl;
for (int i = 0; i < 1; i++)
{
stack1.PopBack();
}//除去栈中的数据
for (int i = 0; i < stack1.getSize(); i++)
{
cout << stack1.at(i);
}
return 0;
}
栈的定义和实现
最新推荐文章于 2023-01-11 00:42:39 发布