数据结构(二)栈结构

  • 一些定义
    1. 栈是插入和删除只能在其一端进行的线性表
    2. 有序性
    3. 后进先出
    4. 空栈,top指针=-1
    5. top永远指向栈顶
    6. 栈用来存储现在不用将来要用的信息
  • 一些基本操作
    1. 从栈顶弹出一个元素
template<class T>
T Stack<T>::Pop(void)
{T temp;
    if(top = -1){
        cerr<<"Attempt to pop an empty stack!"<<endl;
        exit(1);
    }
    temp = StackList[top]; top --;
        return temp;
}
  1. 从栈顶压入出一个元素
template<class T>
T Stack<T>::Push(const T& item)
{T temp;
    if(top = MaxStackSize - 1){
        cerr<<"Stack overflow!"<<endl;
        exit(1);
    }
    top ++;
    StackList[top] = item; 
}
  1. 读栈顶元素
template<class T>
T Stack<T>::Pop(void)
{T temp;
    if(top = -1){
        cerr<<"Attempt to peek empty stack!"<<endl;
        exit(1);
    }
        return StackList[top];
}
  1. 测试栈是否为空
template<class T>
int T Stack<T>:StackEmpty(void) const
{
    return top == -1;// 等或不等,返回1或0
}
  1. 测试栈是否为满
template<class T>
int T Stack<T>:StackFull(void) const
{
    return top == MaxStackSize - 1;// 返回1或0
}
  • 链式栈
    1. 链式栈的类声明
template<class T>
class StackNode
{friend class Stack<T>;// friend 有缘函数,让其他类之间互相访问私有函数或数据
private:
    T data;
    StackNode <T> *next;
    StackNode (T d = 0, StackNode <T> *n = NULL)
    data(d),next(n)
    {}
}
  • 析构函数(用于释放内存空间)
  • 链式栈
    1. 链式栈的类声明
template< class T>
Stack< T >::~Stack()
{StackNode < T > *p;
    while (top != NULL)
{
    {p = top;
    top = top -> next;
    delete p;}
}
  1. 将元素item插入到链式栈的栈顶(链栈插入无需判断栈空)
template< class T>
Stack< T >::Push(const T & item)
{StackNode < T > *p = newNode<T>;
    p -> data = item;
    p -> next = top;
    top = p
}
  1. 删除栈顶元素,返回被删除元素的值
template< class T>
Stack< T >::Pop()
{if (IsEmpty());exit(1);
StackNode < T > *p = top;
T temp = p -> data;
    top =top -> next;
    delete p;
    return temp;
}
  1. 读栈顶元素
template< class T>
 T Stack< T >::GetTop()
{if (IsEmpty());exit(1);
    return top -> data;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值