栈的初步学习

栈有两种实现方法,其一是基于数组的栈,其二是基于链表的栈,下面是我学习到一些栈的相关操作模板(基于数组):

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;            /*底部数组*/
};

其它函数的定义加上虚拟类型参数即可。

原文地址:https://www.cnblogs.com/52wu244/p/6895329.html