Chinaunix首页 | 论坛 | 博客
  • 博客访问: 239227
  • 博文数量: 91
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 955
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-12 09:38
文章分类

全部博文(91)

文章存档

2017年(1)

2011年(1)

2008年(15)

2007年(74)

我的朋友

分类: 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++合起来的文件

阅读(1235) | 评论(0) | 转发(0) |
0

上一篇:单链表模板类

下一篇:c++ sorts template

给主人留下些什么吧!~~