栈的初步学习
栈有两种实现方法,其一是基于数组的栈,其二是基于链表的栈,下面是我学习到一些栈的相关操作模板(基于数组):
class ArrayStack
{
public:
ArrayStack(int s = 10); /*初始化栈容量*/
~ArrayStack();
public:
int top(); /*栈顶*/
void push(int t); /*进栈*/
int pop(); /*出栈*/
bool isEmpty(); /*判空*/
int size(); /*栈大小*/
private:
int count; /*栈元素数量*/
int capacity; /*栈容量*/
int * array; /*底部数组*/
};
int ArrayStack::top() /*栈顶*/
{
if (count != 0)
{
return array[count - 1];
}
};
void ArrayStack::push(int t) /*进栈*/
{
if (count != capacity) /*是否栈满*/
{
array[count++] = t;
}
};
int ArrayStack::pop() /*出栈*/
{
if (count != 0) /*是否栈空*/
{
return array[--count];
}
};
bool ArrayStack::isEmpty() /*栈空*/
{
return count == 0;
};
int ArrayStack::size() /*栈大小*/
{
return count;
};
这种栈只能输入int型数据,如果想要输入其它类型,可以用函数模板的知识,如:
template<typename T>
class ArrayStack
{
public:
ArrayStack(int s = 10); /*初始化栈容量*/
~ArrayStack();
public:
T top(); /*栈顶*/
void push(T t); /*进栈*/
T pop(); /*出栈*/
bool isEmpty(); /*判空*/
int size(); /*栈大小*/
private:
int count; /*栈元素数量*/
int capacity; /*栈容量*/
T * array; /*底部数组*/
};
其它函数的定义加上虚拟类型参数即可。