数据结构学习笔记之模板栈

来源:互联网 发布:java的输出语句怎么写 编辑:程序博客网 时间:2024/05/19 23:53

之前已经写过一篇关于栈的,最近刚学了模板类的知识顺带复习一下栈。
栈:FILO first in last out 简明的一句话就能概括所有的点了,但关于栈的应用还需多练多加体会。
模板类相较于typedef的优势在于多种数据类型可以混用而不受限制,STL里的队列,栈等数据结构都是模板类实现的,可以同时声明int型,char型等不同数据类型值的高级数据结构。实现起来也很容易却方便了很多,下面以栈为例,写一个模板类:

static const CAPACITY=100;template <class Item>class Stack{    public:        typedef Item value_type;        typedef std::size_t size_type;        Stack(size_type volume=CAPACITY){            size = volume;            data = new value_type[size];            top = 0;        }        ~Stack(){  delete []data; }        bool push(const Item& value){            if(top>size-1){ return false; }            data[top] = value;            top++;            return true;        }        bool pop(){            if(isempty()){ return false; }            top--;            return true;        }        Item top() const {             if(isempty()){ return null;}            return data[top];        }        bool isempty() const{            if(top==0){ return true;}            return false;        }        private:            value_type* data;            size_type size,top;};

在类的成员函数内部,通过Item定义的数据类型可以直接拿来用,但在类外则需要typename关键字来告诉编译器这是一种数据类型,类名+< Item >以表示这是一个模板类。
区别列在下表:

在非模板类中 模板类中 value_type Item size_type(成员函数内) size_type size_type(成员函数外) typename 类名< Item >::size_type

这次学的堆的内容会在二叉树那一节整理出来、ここまでよ。

0 0
原创粉丝点击