C++利用链表与模板实现栈
2017-03-19 09:42
691 查看
栈是一种十分常见的后进先出的数据结构.本文使用C++, 模板, 链表来自己实现一个最基本的栈.
数据结构定义:
使用LinkList来实现栈. LinkList基于我的另一篇文章的LinkList稍作修改。
http://blog.csdn.net/luanzheng_365/article/details/62073712
LinkList在这里维护栈内的资源。栈只提供push, pop, topElem等重要接口。对应使用LinkList中的从头部插入节点,从头部删除节点,取头部节点即可。栈的大小通过cacitity参数控制,该参数同时传入LinkList,这样就实现了通过控制LinkList来控制栈的大小。pop方法与topElem方法传入引用,结果可以很方便的通过该引用参数返回,而函数本身的返回布尔值只表示该操作是否成功。具体使用时,只需要先检查布尔值是否成功,在成功后再取引用参数的传出值即可。
程序运行结果如下:
测试代码如下:
数据结构定义:
使用LinkList来实现栈. LinkList基于我的另一篇文章的LinkList稍作修改。
http://blog.csdn.net/luanzheng_365/article/details/62073712
LinkList在这里维护栈内的资源。栈只提供push, pop, topElem等重要接口。对应使用LinkList中的从头部插入节点,从头部删除节点,取头部节点即可。栈的大小通过cacitity参数控制,该参数同时传入LinkList,这样就实现了通过控制LinkList来控制栈的大小。pop方法与topElem方法传入引用,结果可以很方便的通过该引用参数返回,而函数本身的返回布尔值只表示该操作是否成功。具体使用时,只需要先检查布尔值是否成功,在成功后再取引用参数的传出值即可。
程序运行结果如下:
template<typename T, unsigned int capicity> class Stack { public: Stack(); ~Stack(); bool push(T data); bool pop(T &data); bool topElem(T &data); unsigned int getSize(); private: bool isEmpty(); bool isFull(); LinkList<T, capicity> *linkList = NULL; };
#include "Stack.h" template<typename T, unsigned int capacity> Stack<T, capacity>::Stack() { if (NULL == linkList) { linkList = new LinkList<T, capacity>(); } } template<typename T, unsigned int capacity> Stack<T, capacity>::~Stack() { delete linkList; linkList = NULL; } template<typename T, unsigned int capacity> bool Stack<T, capacity>::push(T data) { bool rs = false; if (isFull()) { rs = false; } else { rs = linkList->insertFromHead(data); } return rs; } template<typename T, unsigned int capacity> bool Stack<T, capacity>::pop(T &data) { bool rs = false; if (isEmpty()) { rs = false; } else { rs = linkList->deleteFromHead(data); } return rs; } template<typename T, unsigned int capacity> bool Stack<T, capacity>::isFull() { bool rs = false; if (capacity == linkList->getSize()) { rs = true; } return rs; } template<typename T, unsigned int capacity> bool Stack<T, capacity>::isEmpty() { bool rs = false; if (0 == linkList->getSize()) { rs = true; } return rs; } template<typename T, unsigned int capacity> bool Stack<T, capacity>::topElem(T &data) { bool rs = false; if (isEmpty()) { rs = false; } else { rs = linkList->getFirst(data); } return rs; } template <typename T, unsigned int capacity> unsigned int Stack<T, capacity>::getSize() { return linkList->getSize(); }
测试代码如下:
void testStack() { Stack<int, LINK_NODE_SIZE> *stack = new Stack<int, LINK_NODE_SIZE>(); for (int i = 0; i < 10; i++) { bool rs = stack->push(i); if (rs) { cout << "Push stack: value =" << i << endl; } } int data = -1; for (int i = 0; i < 3; i++) { bool rs = stack->topElem(data); if (rs) { cout << "Get Top stack: value =" << data << endl; } } for (int i = 0; i < 10; i++) { bool rs = stack->pop(data); if (rs) { cout << "Pop stack: value=" << data << endl; rs = stack->topElem(data); if (rs) { cout << "Get Top stack: value =" << data << endl; } } } }
相关文章推荐
- C++利用链表与模板实现栈
- 利用c++模板实现单链表
- C++利用链表与模板实现栈
- C++利用链表与模板实现栈
- 利用 C++ 单向链表实现队列
- c++ 模板 链表实现
- 利用C++模板,代替虚函数,实现类的静态多态性(加入性能测试部分)
- C++中利用模板实现instanceof和is_super_of
- c++ 链表(模板)简单实现
- 数据结构(3)单循环链表 c++ 模板实现
- C++实现的单链表通用模板
- 利用C++模板,代替虚函数实现类的静态多态性
- 利用C++模板,代替虚函数,实现类的静态多态性(加入性能测试部分)
- c++模板实现自定义链表及操作
- 利用c++模板实现求数组最大值
- 数据结构(2)单链表 c++ 模板实现
- 数据结构学习系列三-单向循环链表(c++实现且应用模板)
- C++ 学习练手 - 双向链表的模板实现
- 数据结构C++模板实现之----------------单向链表
- C++类模板 实现双向循环链表的基本算法 《数据结构》(C++版 北京科海)中摘抄