栈类模板

栈是只能从一端访问的线性群体,可以访问的这一端称栈顶,另一端称栈底。栈是一种后进先出的数据结构。

栈示意图

栈的应用举例——表达式处理

栈的基本状态

  • 栈空
  • 栈满
  • 一般状态

栈空

  • 栈中没有元素(以数组容纳的栈为例)

栈满

  • 栈中元素个数达到上限(以数组容纳的栈为例)

一般状态

  • 栈中有元素,但未达到栈满状态(以数组容纳的栈为例)

栈的基本操作

  • 初始化
  • 入栈
  • 出栈
  • 清空栈
  • 访问栈顶元素
  • 检测栈的状态(满、空)

例9-8 栈类模板

//Stack.h
#ifndef STACK_H
#define STACK_H
#include <cassert> 
template <class T, int SIZE = 50>
class Stack {
private:
    T list[SIZE];
    int top;
public:
    Stack();
    void push(const T &item);
    T pop();
    void clear();
    const T &peek() const;
    bool isEmpty() const;
    bool isFull() const;
};

//模板的实现
template <class T, int SIZE>
Stack<T, SIZE>::Stack() : top(-1) { }   
template <class T, int SIZE>
void Stack<T, SIZE>::push(const T &item) {  
    assert(!isFull());  
    list[++top] = item; 
}
template <class T, int SIZE>
T Stack<T, SIZE>::pop() {   
    assert(!isEmpty()); 
    return list[top--]; 
}
template <class T, int SIZE>
const T &Stack<T, SIZE>::peek() const {
    assert(!isEmpty()); 
    return list[top];   //返回栈顶元素
}
template <class T, int SIZE>
bool Stack<T, SIZE>::isEmpty() const {
    return top == -1;
}
template <class T, int SIZE>
bool Stack<T, SIZE>::isFull() const {   
    return top == SIZE - 1;
}

template <class T, int SIZE>
void Stack<T, SIZE>::clear() {  
    top = -1;
}

#endif  //STACK_H

 

posted on 2015-10-31 13:38  让编程成为一种习惯  阅读(315)  评论(0编辑  收藏  举报