栈类模板

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

栈示意图

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

栈的基本状态

  • 栈空
  • 栈满
  • 一般状态

栈空

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

栈满

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

一般状态

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

栈的基本操作

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

例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
时间: 2024-10-10 21:27:18

栈类模板的相关文章

链表栈类模板

链表节点 ListNode.h 1 #include "stdafx.h" 2 #include<iostream> 3 using namespace std; 4 template <typename Type> class LinkStack; 5 template <typename Type> 6 // 链表节点 7 class ListNode{ 8 private: 9 friend class LinkStack<Type>

类模板的用法

1.格式:template<模板参数表>  (参数可以直接定义默认值) class 类名 { ...}; 其成员函数可以在类外定义. eg: 1 template <class TNO,class TScore=int,int num=10> 2 class S 3 { 4 private: 5 TNO Sid[num]; 6 public: 7 int bel(TScore ascore); 8 void sort(); 9 }; 10 template <class TN

c++数组类模板(栈内存)

#ifndef _ARRAY_H_ #define _ARRAY_H_ /* * 实现一个数组类模板,在栈上 * why * 2016/9/5 */ template < typename T, int N > class Array { private: T m_array[N]; public: int length(); //获取数组长度 bool set_array(T value, int index);  //设置数组元素内容 bool get_array(T& value

[数据结构]栈之顺序栈的类模板实现

栈的数组实现形式,采用动态分配数组,不够时可以调整栈的大小. Stack.h文件:主要定义栈的抽象基类,提供公共的接口函数. #ifndef STACK #define STACK //栈的抽象基类 template<class T> class Stack { public: Stack(){} ~Stack(){} virtual void Push(const T& x)=0; virtual bool Pop(T& x)=0; virtual bool getTop(T

C++类模板

在上篇文章(C++函数模板)中,主要介绍了C++中函数模板,与函数相似,类也可以被一种或多种类型参数化.容器类就是一个具有这种特性的典型的例子, 本文地址:http://www.cnblogs.com/archimedes/p/cpp-class-template.html,转载请注明源地址. 以下通过设计一个类模板Stack的实现来说明: 类模板Stack的实现 #include<iostream> #include<vector> #include<stdexcept&g

C++模板学习:函数模板、结构体模板、类模板

C++模板:函数.结构体.类 模板实现 1.前言:(知道有模板这回事的童鞋请忽视) 普通函数.函数重载.模板函数 认识. //学过c的童鞋们一定都写过函数sum吧,当时是这样写的: int sum(int a,int b) { return a+b; } //实现了整数的相加 //如果再想同时实现小数的相加,就再多写个小数的相加.普通实现我就不写了,知道函数重载的童鞋们会这样写: int sum(int a,int b) {//第一个function return a+b;} double su

c++学习笔记啊——类模板(1)

模板 模板是泛型编程的基础,能够处理在编译时不知道类型的情况 (1)模板函数 模板函数(function template) 一个模板函数就是一个公式,可以用来生成针对特定类型的函数版本,如下compare模板的例子 1 template < typename T > 2 int compare(const T&v1,const T&v2) 3 { 4 //其实只要返回一个值,后面的就不会再执行了 5 if(v1v2) return 1; 6 return 0; 7 } 函数说

java的类模板,对象,实例内存地址分析

java的类模板属于静态的东西是放在方法区的: java的对象是放在栈内存的: java的实例是放在堆内存的(new 出对象的数据): 例如: 注意:静态方法中没有对象,自然就没有this,super(内存角度考虑,是静态的东西在类模板中生成,而对象时new出来的,是在堆内存中): 笔记: java中的成员分为两种:实例成员和静态成员. 实例成员--------实例成员变量和实例成员方法: 静态成员--------静态成员变量和静态成员方法: 版权声明:本文为博主原创文章,未经博主允许不得转载.

C++学习之模板 ----函数模板、类模板

本博文主要讨论函数模板与类模板以及其简单应用. 1).作用:函数模板和类模板都可以看做是一种代码产生器,往里面放入具体的类型,得到具体化的函数或者class. 2).编译(分为两步): a):实例化之前,先检查模板本身语法是否正确: b):根据 函数调用或者类模板调用 ,先去实例化模板代码,产生具体的函数/类. 也就是说, 没有函数调用或者类类型对象声明,就不会实例化模板代码,在目标文件obj中找不到模板的痕迹. 3):优缺点 模板的缺点是代码膨胀,编译速度慢,而优点是运行速度快. 一.函数模板