数据结构学习:栈的模板类实现
2017-04-08 16:11
162 查看
参考:http://www.imooc.com/learn/611
栈机制:后进先出 LIFO(last in first out)
下面是我用模板类实现的栈:
利用这个栈,实现两个问题:
(1)十进制到K进制的转换。
(2)判断括号是否匹配。
(1)十进制到K进制的转换。
输入:十进制数 转换的进制
输出:转换后的数
(2)判断括号是否匹配。
输入:待判断的括号字符串
输出:判断结果
如有不足,欢迎指正!
栈机制:后进先出 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_h template<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; }
如有不足,欢迎指正!
相关文章推荐
- 数据结构学习:环形队列的模板类实现
- 数据结构学习:单向链表的模板类实现
- 数据结构学习之树---AVL树的实现
- 数据结构学习的简单问题(四):用队列自己实现String类
- 【数据结构】HashMap原理及实现学习总结
- 一步步学习数据结构和算法之冒泡排序效率分析及java实现
- 一步步学习数据结构和算法之选择排序效率分析及java实现
- 数据结构学习笔记-队列的链式存储(C语言实现)
- 数据结构学习记录连载4(上一篇中提高要求实现)
- 数据结构学习----线性表的链式表示之循环单链表(Java实现)
- 数据结构学习----顺序循环队列(Java实现)
- 数据结构学习笔记3——顺序表的实现
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
- 数据结构学习---堆栈的动态数组实现及链表实现
- sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)
- 数据结构学习笔录---队列的实现
- 关于数据结构的学习经验分享 (1关于实现语言)
- 数据结构学习3--栈的实现(c++)
- 数据结构学习三(一个简单的队列实现)
- 数据结构学习之-二叉树的定义和存储实现