//顺序栈
#include <iostream>
using namespace std;
#define MAXSIZE 100
//定义栈: 后进先出
template <typename S>
class Stack{
private:
S data[MAXSIZE]; //数据元素
S top=-1; //栈顶
public:
Stack(){} //无参构造
~Stack(){} //析构函数
bool empty(); //判断栈空
bool full(); //判断栈满
void push(S e); //入栈
void pop(); //出栈
void Output(); //栈的遍历
};
//判断栈空
template <typename S>
bool Stack<S>::empty(){
if(top==-1){
cout<<"栈空"<<endl;
return true;
}
return false;
}
//判断栈满
template <typename S>
bool Stack<S>::full(){
if(top==MAXSIZE-1){
cout<<"栈满"<<endl;
return true;
}
return false;
}
//入栈
template <typename S>
void Stack<S>::push(S e){
if(full()!=true){ //如果栈不满,则执行入栈操作
data[++top]=e; //先让top++,再放入元素
}else{
full();
}
}
//出栈
template <typename S>
void Stack<S>::pop(){
if(empty()!=true){ //如果栈不空,则执行出栈操作
cout<<data[top--]<<" "; //先输出栈中元素,再让top--
}else{
empty();
}
}
//栈的遍历
template <typename S>
void Stack<S>::Output(){
if(empty()!=true){
for(int i=0;i<=top;i++){
cout<<data[i]<<" ";
}
cout<<endl;
}else{
empty();
}
}
int main()
{
Stack<int> s;
cout<<"入栈元素: "<<endl;
for(int i=0;i<10;i++){
s.push(i);
}
s.Output();
cout<<"出栈元素: "<<endl;
for(int j=0;j<5;j++){
s.pop();
}
cout<<endl;
cout<<"栈内剩余元素: "<<endl;
s.Output();
return 0;
}
//循环队列
#include <iostream>
using namespace std;
#define MAXSIZE 100
template <typename Q>
class Queue{
private:
Q data[MAXSIZE]; //数据元素
Q front=0; //队头
Q rear=0; //队尾
public:
Queue(){} //无参构造
~Queue(){} //析构函数
bool empty(); //判断队空
bool full(); //判断队满
void enqueue(Q e); //入队
void dequeue(); //出队
void Output(); //队列的遍历
};
//判断队空
template <typename Q>
bool Queue<Q>::empty(){
if(front==rear){
cout<<"队空"<<endl;
return true;
}
return false;
}
//判断队满
template <typename Q>
bool Queue<Q>::full(){
if(front==(rear+1)%MAXSIZE){
cout<<"队满"<<endl;
return true;
}
return false;
}
//入队
template <typename Q>
void Queue<Q>::enqueue(Q e){
if(full()!=true){ //判断队列不为满,则数据元素入队
//在队尾入队
data[rear]=e;
rear=(rear+1)%MAXSIZE;
}
}
//出队
template <typename Q>
void Queue<Q>::dequeue(){ //判断队列不为空,则数据元素出队
if(empty()!=true){
//在队头出队
cout<<data[front]<<" ";
front=(front+1)%MAXSIZE;
}
}
//队列的遍历
template <typename Q>
void Queue<Q>::Output(){
if(empty()!=true){
for(int i=front;i!=rear;i=(i+1)%MAXSIZE){
cout<<data[i]<<" ";
}
cout<<endl;
}
}
int main()
{
Queue<int> q;
cout<<"入队元素:"<<endl;
for(int i=0;i<10;i++){
q.enqueue(i);
}
q.Output();
cout<<"出队元素:"<<endl;
for(int j=0;j<5;j++){
q.dequeue();
}
cout<<endl;
cout<<"队内剩余元素: "<<endl;
q.Output();
return 0;
}