手动实现封装栈,队列模板类
//模板栈
#include <iostream>
#include<stack>
#define N 20
using namespace std;
template<typename type>
class my_stack
{
private:
type data[N];
int last;
public:
my_stack():last(0) {} //无参构造
bool empty(){return last==0?1:0;} //判空
void push(const type &val) //入栈
{
if(last==N){
throw string("stack full"); //异常处理机制,栈已满
}
last++;
data[last]=val;
}
void pop() //出栈
{
if(last){
last--;
}else{
last=0;
}
}
int size(){return last;} //求栈大小
type &top() //返回栈顶元素
{
if(last){
return data[last];
}else{
throw string("stack empty"); //异常处理机制,栈为空
}
}
};
int main()
{
my_stack<int> s; //s调用无参构造
cout<<"s.empty:"<<s.empty()<<endl; //判空
for(int i=1;i<=10;i++)
{
try {
s.push(i); //往栈中写数据
} catch (string e) {
cout<<e<<endl; //发出异常
}
try {
cout<<s.top()<<" "; //访问栈顶元素
} catch (string e) {
cout<<e<<endl; //发出异常
}
}
cout<<endl;
cout<<"s.size:"<<s.size()<<endl; //求栈大小
cout<<"s.empty:"<<s.empty()<<endl;
for(int i=1;i<=10;i++)
{
try {
cout<<s.top()<<" ";
} catch (string e) {
cout<<e<<endl;
}
s.pop(); //移除栈顶元素
}
return 0;
}
//模板队列
#include <iostream>
#include<queue>
#define N 10
using namespace std;
template<typename type>
class my_queue
{
private:
type data[N];
int head;
int tail;
public:
my_queue():head(0),tail(0) {} //无参构造
bool empty(){return head==tail?1:0;} //判空
void push(const type &val) //在队尾插入数据
{
if((tail+1)%N==head){
throw string("queue full");
}
data[tail]=val;
tail=(tail+1)%N;
}
void pop() //从队头删除元素
{
if(head==tail){
throw string("queue empty");
}
head=(head+1)%N;
}
int size(){return (tail-head+N)%N;} //求队列大小
type &front(){return data[head];} //返回第一个元素
type &back(){return data[tail-1];} //返回最后一个元素
};
int main()
{
my_queue<int> q;
cout<<"q.empty:"<<q.empty()<<endl;
for(int i=1;i<=10;i++)
{
try {
q.push(i);
} catch (string e) {
cout<<e<<endl;
}
}
cout<<"q.size:"<<q.size()<<endl;
cout<<"q.front:"<<q.front()<<endl;
cout<<"q.back:"<<q.back()<<endl;
return 0;
}