C++实现栈和队列
来源:互联网 发布:js 设置div style 编辑:程序博客网 时间:2024/05/19 00:46
C++实现顺序栈:
//顺序栈#include <iostream>using namespace std;#define MAXSIZE 10struct __TrueType { bool Get() { return true; } }; struct __FalseType { bool Get() { return false; } }; template <class _T> struct TypeTraits { typedef __FalseType __IsPODType; };template <> struct TypeTraits< bool> { typedef __TrueType __IsPODType; }; template <> struct TypeTraits< char> { typedef __TrueType __IsPODType; }; template <> struct TypeTraits< short> { typedef __TrueType __IsPODType; }; template <> struct TypeTraits< int> { typedef __TrueType __IsPODType; }; template <> struct TypeTraits< long> { typedef __TrueType __IsPODType; }; template <> struct TypeTraits< unsigned long long> { typedef __TrueType __IsPODType; }; template <> struct TypeTraits< float> { typedef __TrueType __IsPODType; }; template <> struct TypeTraits< double> { typedef __TrueType __IsPODType; };template<class T>class Stack{public:Stack(): _pData(new T[MAXSIZE]), _size(0), _capacity(MAXSIZE){}Stack(const Stack<T>& s): _pData(new T[s._capacity]), _size(s._size), _capacity(s._capacity){for(size_t i=0; i<_size; i++){_pData[i] = s._pData[i];}}Stack<T>& operator=(const Stack<T>& s){if(this != &s){_pData = new T[s._capacity];_size = s._size;_capacity = s._capacity;for(size_t i=0; i<_size; i++){s._pData[i] = _pData[i];}}return *this;}void Push(const T& data){if(_size == _capacity){CheckCapacity();}_pData[_size++] = data;}void Pop(){if(Empty()){cout<<"栈已空!"<<endl;return;}--_size;}bool Empty()const{return _size==0;}T& Top(){return _pData[_size-1];}size_t Size()const{return _size;}~Stack(){delete[] _pData;}void PrintStack(){for(size_t i=0; i<_size; i++){cout<<_pData[i]<<" "; }cout<<endl;}private:void CheckCapacity(){// 申请新空间_capacity += 3;T* tmp = new T[_capacity];// 拷贝元素到新空间//memcpy() 优点:快 缺点:浅拷贝 //for() 优点:避免了浅拷贝 缺点:速度慢if(TypeTraits<T>::__IsPODType.get())// 判断返回值 { memcpy(tmp, _pData, _capacity*sizeof(T)); } else{for(size_t i=0; i<_size; i++){tmp[i] = _pData[i];}}// 释放旧空间delete[] _pData;_pData = tmp;}private:T* _pData;size_t _size;size_t _capacity;};
C++实现循环队列:
//循环队列#include <iostream>using namespace std;template<typename T>class SqQueue{public:SqQueue(size_t size = 10): _front(0), _rear(0), _size(size+1){_pData = new T[_size];}size_t GetLength(){return _size-1;}~SqQueue(){delete[] _pData;}size_t GetFront(){if(IsEmpty()){cout<<"队列为空!";}return _pData[_front];}size_t GetData(size_t i){if(IsEmpty()){cout<<"队列为空!";}_front = (_front+i)%_size;return _pData[_front];}bool IsEmpty(){if(_front == _rear)return true;return false;}bool IsFull(){if((_rear+1)%_size == _front)return true;return false;}void EnQueue(const T& value){if(IsFull()){cout<<"队列为满!";} _pData[_rear] = value;_rear = (_rear+1)%_size;}T DeQueue(){if(IsEmpty()){cout<<"队列为空!";}T value = _pData[_front];_front = (_front+1)%_size;return value;}private:T* _pData;size_t _front;size_t _rear;size_t _size;};
阅读全文
0 0
- C实现栈和队列
- 栈和队列 C语言实现
- (C++)栈和队列的模拟实现
- C语言实现,顺序队列,循环队列,和栈!
- C++:栈和队列
- 队列实现栈和栈实现队列
- 【C++】模板实现双链表和队列
- C语言实现链式队列和顺序队列
- c/c++实现顺序循环队列和链式队列
- c语言实现循环队列和链式队列
- 两个栈实现一个队列(C/C++)
- 数据结构-------C栈和队列
- 利用栈实现队列(C语言实现)
- 【C语言/C++】 栈和队列
- 栈和队列的实现
- C#实现栈和队列
- 栈和队列的实现
- 用链表实现栈和队列
- CVTE笔试题二:判断两个字符串的拼接方式是否相同
- [问题汇总]ubuntu16.04+cuda8.0+cudnn+opencv3.2+caffe+tensorflow+SS搭建
- python 入门系列4:while 循环
- I2C驱动学习
- 学习笔记-散列表
- C++实现栈和队列
- Java 面向对象的总结 初级篇 1
- TCP-IP学习笔记(八)——RARP:逆地址解析协议
- zookeeper的永久监听
- Jenkins学习——邮件配置
- QScrollArea 用法总结
- 关于package ——java笔记
- echarts结合poi-word导出的简单处理
- java 3年经验面试题