linux administrator
jimonitu
全部博文(91)
2017年(1)
2011年(1)
2008年(15)
2007年(74)
kirsi17
1cpuer
zhjixi12
totola14
余散微习
cdm2135
screenpa
airmy
xyman_55
分类: LINUX
2008-03-04 14:52:36
template stack: *********illustrate************* #include <iostream.h> template <class T> class Stack { private: T top, length; T *stack; public: Stack(int size); ~Stack() {delete[] stack;} void push(T &); T pop(); T peek();//visit stack top member int stackfull(); int stackempt(); }; template <class T> Stack<T>::Stack(int size) { stack=new T[size]; if(!stack)//judge the allocate is success {cout<<"allocate fail"<<endl; exit(1); } length=size; top=0; } template <class T> void Stack<T>::push(T &val) { if(top==length) cout<<"the stack is full, can push"<<endl; else stack[top++]=val; } template <class T> T Stack<T>::pop() { T x; if(top) { x=stack[--top]; return x; } else exit(1); } template <class T> int Stack<T>::stackfull()//test the stack is full { return top==length; } template <class T> int Stack<T>::stackempt()//test the stack is empty { return top==0; } template <class T> T Stack<T>::peek() { if(top) return stack[top-1]; } int main() { int a=12; char ch='a'; Stack<char> stach(4); Stack<int> sta(5); sta.push(a); cout<<sta.peek()<<endl; cout<<sta.pop()<<endl; for(int i=0;i<4;i++) {stach.push(ch); ch++; } cout<<stach.peek()<<endl; for(int i=0;i<4;i++) cout<<stach.pop()<<endl; cout<<stach.stackfull()<<endl; cout<<stach.stackempt()<<endl; return 0; } *********template queue********* #include <iostream.h> template <class T> class Queue { private: int front,rear,count,length;//count is the number of members in queue T *queue; public: Queue(int); ~Queue() {delete[] queue;} void queuein(T &); T queueout(); void queueclear();//dump queue int queuefull(); int queueempt(); T queuefirst(); }; template <class T> Queue<T>::Queue(int size) { queue=new T[size]; if(!queue) { cout<<"allocate fail"<<endl; exit(1); } length=size; front=rear=count=0; } template <class T> void Queue<T>::queuein(T &temp) { if(count==length) { cout<<"the queue is full, can't put in"<<endl; exit(1); } count++; queue[rear]=temp; rear=(rear+1)%length; } template <class T> T Queue<T>::queueout() { T temp; if(count) { temp=queue[front]; count--; front=(front+1)%length; return temp; } else { cout<<"queue is empty"<<endl; exit(1); } } template <class T> void Queue<T>::queueclear() { front=count=rear=0; } template <class T> int Queue<T>::queuefull() { return count==length; } template <class T> int Queue<T>::queueempt() { return count==0; } template <class T> T Queue<T>::queuefirst() { return queue[front]; } int main() { int a=12; Queue<int> que1(5); que1.queuein(a); cout<<que1.queueout()<<endl; return 0; } 提示: 当将这个文件分成几个文件后,好像不能通过编译,就是加上有.h, .c++合起来的文件
上一篇:单链表模板类
下一篇:c++ sorts template
登录 注册