/*用数组构造栈
* 栈为后进先出(LIFO)
* */
#include <iostream>
using namespace std;
template <typename T>
class Stack {
public:
//构造函数,申请内存
Stack(int size=32) : len(size), index(size)
{
ptr = new T[len];
}
//析构函数,销毁申请的内存,防止内存泄露
~Stack()
{
delete[] ptr;
}
//入栈操作,index从末尾开始,指向数组中的元素
void push(const T& value)
{
if (full()) {
return ;
} else {
index -= 1;
ptr[index] = value;
}
}
//出栈操作
void pop()
{
if (empty()) {
return ;
} else {
index += 1;
}
}
//访问栈顶元素
T& top()
{
return ptr[index];
}
//判断栈是否为满,满返回true(1)
bool full()
{
return index == 0;
}
//判断栈是否为空,空返回true(1)
bool empty()
{
return index == len;
}
int size(){
return len - index;
};
private:
// ptr 数组名,即数组首地址 len为数组的长度,index为数组中未被使用的空间
T* ptr;
int len;
int index;
};
int main()
{
Stack<int> s;
s.push(5);
s.push(6);
s.push(4);
cout << "top = " << s.top() << endl;
cout << "size= " << s.size()<< endl;
s.pop();
cout << "top = " << s.top() << endl;
cout << "size= " << s.size()<< endl;
cout << "empty: " << s.empty() << endl;
}
* 栈为后进先出(LIFO)
* */
#include <iostream>
using namespace std;
template <typename T>
class Stack {
public:
//构造函数,申请内存
Stack(int size=32) : len(size), index(size)
{
ptr = new T[len];
}
//析构函数,销毁申请的内存,防止内存泄露
~Stack()
{
delete[] ptr;
}
//入栈操作,index从末尾开始,指向数组中的元素
void push(const T& value)
{
if (full()) {
return ;
} else {
index -= 1;
ptr[index] = value;
}
}
//出栈操作
void pop()
{
if (empty()) {
return ;
} else {
index += 1;
}
}
//访问栈顶元素
T& top()
{
return ptr[index];
}
//判断栈是否为满,满返回true(1)
bool full()
{
return index == 0;
}
//判断栈是否为空,空返回true(1)
bool empty()
{
return index == len;
}
int size(){
return len - index;
};
private:
// ptr 数组名,即数组首地址 len为数组的长度,index为数组中未被使用的空间
T* ptr;
int len;
int index;
};
int main()
{
Stack<int> s;
s.push(5);
s.push(6);
s.push(4);
cout << "top = " << s.top() << endl;
cout << "size= " << s.size()<< endl;
s.pop();
cout << "top = " << s.top() << endl;
cout << "size= " << s.size()<< endl;
cout << "empty: " << s.empty() << endl;
}