说明:
通过模板类对栈与队列在public写入成员函数完成对栈和队列操作的基本功能。
栈:
原理与vector相似,该程序通过vector自带函数完成对栈的简单操作(完成判空、入栈、出栈功能)
实现代码:
#include<iostream>
#include<vector>
using namespace std;
template<typename T>
class MyStack
{
private:
vector<T> v;
public:
MyStack(){}
MyStack(const MyStack& s)
{
this->v = s.v;
}
~MyStack(){}
//判空
bool empty()
{
return this->v.empty();
}
void push(T e)
{
this->v.push_back(e);
}
T pop()
{
if(v.empty())
{
cout<< "栈空" <<endl;
//可增加throw用于捕获错误
}
T res=v.back();
this->v.pop_back();
return res;
}
};
int main()
{
MyStack<int> s;
cout <<"判空(1为空0为非空):"<< s.empty() << endl;
cout<<"执行入栈"<<endl;
for(int i=1;i<=5;i++)
{
s.push(i);
}
cout <<"判空(1为空0为非空):"<< s.empty() << endl;
cout<<"执行出栈"<<endl;
for(int i=1;i<=5;i++)
{
cout<<s.pop()<<" ";
}
cout<<endl;
cout <<"判空(1为空0为非空):"<< s.empty() << endl;
cout<<endl;
}
运行结果:
队列:
完成通过模板类入队出队销毁功能
#include<iostream>
#include<string.h>
using namespace std;
#define MAX 6
template <typename T>
class Queue
{
private:
struct queue_list
{
T q[MAX];
int front;
int rear;
};
queue_list *Q;
public:
//创建队列
int create(){
Q=new queue_list;
if(NULL==Q){
cout<<"创建失败"<<endl;
return -1;
}
memset(Q,0,sizeof (queue_list));
Q->front=Q->rear=0;
return 0;
}
//入队
int push(char n){
if(Q->rear==MAX){
cout<<"队列满,入队失败"<<endl;
return -1;
}
Q->q[Q->rear]=n;
Q->rear=(Q->rear+1);
return 0;
}
//出队
int pop(){
if(Q->front==Q->rear){
cout<<"队列空,出队失败"<<endl;
return -1;
}
cout<<Q->q[Q->front]<<endl;
Q->front=(Q->front+1);
return 0;
}
//销毁队列
void des(){
delete Q;
cout<<"队列已销毁"<<endl;
}
};
int main()
{
Queue<char> q;
q.create();
q.push('a');
q.push('B');
q.push('c');
q.push('D');
q.push('e');
cout<<"遍历队列:"<<endl;
cout<<"出队顺序:"<<endl;
for(int i=0;i<MAX-1;i++)
{
q.pop();
}
q.des();
return 0;
}
测试结果