数据结构学习:栈的模板类实现
来源:互联网 发布:ptc软件收费模式 编辑:程序博客网 时间:2024/06/05 11:38
参考:http://www.imooc.com/learn/611
栈机制:后进先出 LIFO(last in first out)
下面是我用模板类实现的栈:
#pragma once#ifndef STACK_H#define STACK_H#include <iostream>using namespace std;template <typename T>class Stack {private: T *m_pBuffer;//栈空间指针 int m_iCapacity;//栈容量 int m_iTop;//栈顶,栈中元素个数public: Stack(int size);//创建栈 ~Stack();//销毁栈 bool isEmpty();//判空 bool isFull();//判满 void clearStack();//清空栈 int size();//栈中元素个数 bool push(T element);//入栈 bool pop(T &element);//出栈 T top();//获取栈顶元素 void traverseStack(bool isFromTop);};#endif // ! STACK_htemplate<typename T>inline Stack<T>::Stack(int size){ m_pBuffer = new T[size]; m_iCapacity = size; m_iTop = 0; }template<typename T>inline Stack<T>::~Stack(){ delete []m_pBuffer; m_pBuffer = NULL;}template<typename T>inline bool Stack<T>::isEmpty(){ return m_iTop == 0 ? true: false;}template<typename T>inline bool Stack<T>::isFull(){ return m_iTop==m_iCapacity?true:false;}template<typename T>inline void Stack<T>::clearStack(){ m_iTop = 0;}template<typename T>inline int Stack<T>::size(){ return m_iTop;}template<typename T>inline bool Stack<T>::push(T element){ if(isFull()) return false; else { m_pBuffer[m_iTop] = element; m_iTop++; return true; }}template<typename T>inline bool Stack<T>::pop(T & element){ if(isEmpty()) return false; else { m_iTop--; element = m_pBuffer[m_iTop]; return true; }}template<typename T>inline T Stack<T>::top(){ return m_pBuffer[m_iTop-1];}template<typename T>inline void Stack<T>::traverseStack(bool isFromTop){ if (isFromTop) { for (int i = m_iTop - 1; i >= 0; i--) { cout << m_pBuffer[i] << " "; } } else { for (int i = 0; i < m_iTop; i++) { cout << m_pBuffer[i] << " "; } }}
利用这个栈,实现两个问题:
(1)十进制到K进制的转换。
(2)判断括号是否匹配。
(1)十进制到K进制的转换。
输入:十进制数 转换的进制
输出:转换后的数
#include "stdafx.h"#include "Stack.h"#include <iostream>using namespace std;char a[] = "0123456789ABCDEF";int main(){ int num; int K; while (cin >> num>>K) { Stack<int> *pStack = new Stack<int>(10e6); int red = 0; while (num>0) { red = num % K; pStack->push(red); num = num / K; } int e; while (!pStack->isEmpty()) { pStack->pop(e); cout << a[e]; } cout << endl; delete pStack; pStack = NULL; } return 0;}
(2)判断括号是否匹配。
输入:待判断的括号字符串
输出:判断结果
#include "stdafx.h"#include "Stack.h"#include <iostream>#include <string>using namespace std;int main(){ string s; while (cin >> s) { Stack<char> *pStack = new Stack<char>(10e6); bool flag = true; char e; for each (char current in s) { switch (current) { case '(': case '[': case '{': pStack->push(current); break; case ')': if (pStack->isEmpty()) flag = false; pStack->pop(e); if (e != '(') flag = false; break; case ']': if (pStack->isEmpty()) flag = false; pStack->pop(e); if (e != '[') flag = false; break; case '}': if (pStack->isEmpty()) flag = false; pStack->pop(e); if (e != '{') flag = false; break; default: break; } } if (flag && (pStack->isEmpty())) { cout << "括号匹配!" << endl; } else { cout << "括号不匹配!" << endl; } delete pStack; pStack = NULL; } return 0;}
如有不足,欢迎指正!
0 0
- 数据结构学习:栈的模板类实现
- 数据结构学习:环形队列的模板类实现
- 数据结构学习:单向链表的模板类实现
- [数据结构]栈之顺序栈的类模板实现
- [数据结构]栈之链式栈的类模板实现
- C++数据结构栈Stack的实现模板类
- [数据结构]栈的实现(c++/类模板)
- [数据结构]最小堆的类模板实现
- 数据结构实现(栈类模板)
- 数据结构学习日记(1)——栈模板的代码实现
- Stack数据结构的模板实现
- C++数据结构 顺序表的实现(模板类的实现)
- [数据结构]线性表之顺序表的类模板实现
- [数据结构]线性表之单链表的类模板实现
- [数据结构]队列之顺序队列的类模板实现
- [数据结构]队列之链式队列的类模板实现
- 数据结构-顺序表与单链表的C++模板类实现
- [数据结构] 顺序表的实现(c++/类模板)
- java并发——四种创建线程方式
- nginx限制每个ip访问的频率和并发量
- 浅谈VB.NET
- POJ2955Brackets(区间DP模板题)
- OpenCV中SVM在Android端使用
- 数据结构学习:栈的模板类实现
- C#基础
- MySQL 1366 错误的解决办法
- eclipse中的the resource is not on the build path of a java project相关问题
- 移动端关于@2x与@3x的图片加载实现方法(基于vue.js+stylus)
- 只能通过chrome网上应用商店安装该程序
- hive上连续登录天数的查询
- 《Effective Java》第9章 异常
- golang slice 切片原理