Stack:
#include<iostream>
#include<vector>
using namespace std;
template<typename T>
class MyStack
{
private:
vector<T> v; //用动态数组来实现stack
public:
//无参构造函数
MyStack(){}
//拷贝构造函数
MyStack(const MyStack& s)
{
this->v = s.v;
}
//析构函数
~MyStack(){}
//判空
bool empty()
{
return this->v.empty();
}
//访问栈顶元素
T top()
{
if(this->empty())
{
cout << "栈为空,访问失败" << endl;
return -1; //这里可以用异常处理机制,这里就不写了
}
return this->v.back();
}
//栈顶插入
void push(T e)
{
this->v.push_back(e);
}
//删除栈顶元素
void pop()
{
if(this->empty())
{
cout << "栈为空,删除失败" << endl;
return;
}
this->v.pop_back();
}
//返回容纳的元素数
size_t size()
{
return this->v.size();
}
};
int main()
{
MyStack<int> s;
cout << s.empty() << endl;
s.pop();
for(int i=1;i<=20;i++)
{
s.push(i);
cout << s.top() << " ";
}
cout << endl;
s.pop();
cout << s.top() << endl;
}
queue:
#include <iostream>
#include <list>
using namespace std;
template<typename T>
class Myqueue
{
list<T> l; //用链表实现队列
public:
//无参构造函数
Myqueue(){};
//拷贝构造函数
Myqueue(const Myqueue& q)
{
this->l = q.l;
}
//返回容纳的元素数
size_t size()
{
return this->l.size();
}
//判空
bool empty()
{
return this->l.empty();
}
//向队列尾部插入元素
void push(T data)
{
this->l.push_back(data);
}
//删除首个元素
void pop()
{
if(this->empty())
{
cout << "队列为空,删除" << endl;
return;
}
this->l.pop_front();
}
//访问第一个元素
T front()
{
if(this->empty())
{
cout << "队列为空,访问失败" << endl;
return -1; //这里可以用异常处理机制,这里就不写了
}
return this->l.front();
}
//访问最后一个元素
T back()
{
if(this->empty())
{
cout << "队列为空,访问失败" << endl;
return -1; //这里可以用异常处理机制,这里就不写了
}
return this->l.back();
}
};
int main()
{
//实例化对象
Myqueue<int> q;
//测试判空
cout << q.empty() << endl;
// q.pop();
for(int i=1;i<=20;i++)
{
q.push(i);
cout << q.back() << " ";
}
cout << endl;
cout << q.size() << endl;
}