栈是一种特殊的线性表
线性表是具有想同类型的n(n>=0)个数据元素组成的有序有限序列。
栈的数组实现:
Stack.h
#include<iostream>
using namespace std;
template<class T>
class ArrayStack
{
public:
ArrayStack();
~ArrayStack();
void push(T data);//入栈
T pick();//返回栈顶元素
T pop();//出栈
int size();//栈的大小
int IsEmpty();//判断是否为空
private:
T *arr;
int count;
};
template<class T>
ArrayStack<T>::ArrayStack()
{
arr = new T[12];
if (!arr)
cout << "arr malloc error" << endl;
}
template<class T>
ArrayStack<T>::~ArrayStack()
{
if (arr)
{
delete[] arr;
arr = NULL;
}
}
template<class T>
void ArrayStack<T>::push(T data)
{
arr[count++] = data;
}
template<class T>
T ArrayStack<T>::pick()
{
return arr[count - 1];
}
template<class T>
T ArrayStack<T>::pop()
{
return arr[--count];
}
template<class T>
int ArrayStack<T>::size()
{
return count;
}
template<class T>
int ArrayStack<T>::IsEmpty()
{
return size() == 0;
}
验证main.cpp
#include"Stack.h"
using namespace std;
int main()
{
int tmp = 0;
ArrayStack<int> *astack = new ArrayStack<int>();
cout << "main" << endl;
//->主要用于类类型的指针访问类的成员,而.运算符,主要用于类类型的对象访问类的成员。
astack->push(10);
astack->push(20);
astack->push(30);
tmp = astack->pop();
cout << "tmp=" << tmp << endl;
tmp = astack->pick();
cout << "tmp=" << tmp << endl;
astack->push(40);
while (!astack->IsEmpty())
{
tmp = astack->pop();
cout << tmp << ' ';
}
cout << endl;
system("pause");
return 0;
}
STL示例
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int tmp = 0;
stack<int> astack;
cout << "main" << endl;
astack.push(10);
astack.push(20);
astack.push(30);
astack.pop();
tmp = astack.top();
cout << "tmp=" << tmp << endl;
astack.push(40);
while (!astack.empty())
{
tmp = astack.top();
astack.pop();
cout << tmp << ' ';
}
cout << endl;
system("pause");
return 0;
}