C++实现栈和队列
2018-03-15 15:56
369 查看
#include<iostream> using namespace std; void *memcpy(void *dest,void *src,int n) { char *pdest=(char*)dest; char *psrc=(char*)src; if(psrc+n>pdest) { for(int i=n-1;i>=0;i--) pdest[i]=psrc[i]; } else { for(int i=0;i<n;i++) pdest[i]=psrc[i]; } } //栈的实现 template<typename T> class stack{ public: stack(int i); ~stack(); bool empty(); bool full(); void push(const T &obj); void pop(); T top(); private: int M; int t; T *data; }; template<typename T> stack<T>::stack(int i=1):M(i) { t=-1; data=new T[M]; } template<typename T> stack<T>::~stack() { delete[]data; } template<typename T> bool stack<T>::empty() { return t==-1; } template<typename T> bool stack<T>::full() { return t==M-1; } template<typename T> void stack<T>::push(const T &obj) { if(full()) { T *buf=new T[2*M]; memcpy((char*)buf,(char*)data,sizeof(T)*M); T *tmp=buf; buf=data; data=tmp; delete[]buf; M*=2; } data[++t]=obj; } template<typename T> void stack<T>::pop() { if(empty()) return; t--; } template<typename T> T stack<T>::top() { if(empty()) return T(); return data[t]; } //队列的实现 template<typename T> class queue { public: queue(int i); ~queue(); bool full(); bool empty(); void push(const T &obj); T front(); void pop(); private: int M; int f,r; T *data; }; template<typename T> queue<T>::queue(int i=1):M(i) { f=r=0; data=new T[M]; } template<typename T> queue<T>::~queue() { delete[]data; } template<typename T> bool queue<T>::full() { return (r+1)%M==f; } template<typename T> bool queue<T>::empty() { return f==r; } template<typename T> void queue<T>::push(const T &obj) { if(full()) { T *buf=new T[2*M]; if(f==0) memcpy(buf,data,M*sizeof(T)); else { memcpy(buf,&data[f],(M-f)*sizeof(T)); memcpy(&buf[M-f],data,r*sizeof(T)); f=0; r=M; } T *tmp=buf; buf=data; data=tmp; M*=2; delete []buf; } data[r]=obj; r=(r+1)%M; } template<typename T> T queue<T>::front() { if(empty()) return T(); return data[f]; } template<typename T> void queue<T>::pop() { if(empty()) return; f=(f+1)%M; } int main() { //测试栈 stack<int> st; for(int i=0;i<10;i++) st.push(i); while(!st.empty()) { cout<<st.top()<<' '; st.pop(); } cout<<endl; //测试队列 queue<int> qu; for(int i=0;i<5;i++) qu.push(i); cout<<qu.front()<<endl; qu.pop(); cout<<qu.front()<<endl; qu.pop(); for(int i=5;i<20;i++) qu.push(i); while(!qu.empty()) { cout<<qu.front()<<' '; qu.pop(); } cout<<endl; return 0; }
相关文章推荐
- 顺序队列的c++实现
- 迷宫最短路径的C++实现(队列:广度优先)
- 基于pthread的C++阻塞队列模板类的实现
- (10.19)C++实现链队列的基础操作
- [数据结构]C++队列实现和队列简介
- C++:利用两个队列实现栈的操作
- 用两个栈实现队列 【C++实现】
- C++ 无锁队列实现
- C++模板链表实现优先级队列
- 队列的C++模板实现
- C++队列实现和队列简介
- 【C++】实现循环队列
- 利用 C++ 单向链表实现队列
- c++实现队列操作(建对、入队、出对)
- 数据结构学习之链队列c++实现杨辉三角
- 链队列的C++实现
- C++实现队列--数组实现和链表实现
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- [linux,c++] 基于mutex 的互斥访问队列实现
- 环形队列的C++实现