1.手动封装栈
#include <iostream>
using namespace std;
class Stack
{
private:
int *s=nullptr;
int top;
int len;
public:
//有参构造
Stack(int size):s(new int[size]), top(-1)
{
len=size;
}
//析构函数
~Stack()
{
delete []s;
s=nullptr;
}
//判空函数
bool is_empty( )
{
if(top==-1)
{
return true;
}
return false;
}
//判满函数
bool is_full( )
{
if(top==len-1)
{
return true;
}
return false;
}
//入栈函数
void push_stack(int e)
{
//判断是否存在,是否满
if(s==nullptr||is_full())
{
return;
}
//入栈
s[++top]=e;
return;
}
//出栈函数
void pop_stack( )
{
//判断是否存在,是否空
if(s==nullptr||is_empty())
{
return;
}
//出栈
top--;
return;
}
//遍历函数
void o_stack( )
{
if(s==nullptr||is_empty())
{
return;
}
int i=0;
while(i<=top)
{
cout<<s[i++]<<"\t";
}
cout<<endl;
}
//获取栈顶元素的引用
int &get_quote( )
{
return s[top];
}
};
int main()
{
int e,len;
cout<<"请输入栈的大小 ";
cin>>len;
//实例化栈
Stack s1(len);
//入栈
while(len--)
{
cout<<"请输入入栈元素";
cin>>e;
s1.push_stack(e);
}
cout<<"栈中元素为: "<<endl;
//遍历
s1.o_stack();
//出栈
s1.pop_stack();
cout<<"出栈一个元素后"<<endl;
s1.o_stack();
int &ref=s1.get_quote();
cout<<"栈顶元素为 "<<ref<<endl;
return 0;
}
2.脑图
3.循环队列
#include <iostream>
using namespace std;
class Queue
{
private:
int *q=nullptr;
//队头
int front;
//队尾
int rear;
//队列大小
int len;
public:
//有参构造
Queue(int size):q(new int[size]) , front(0),rear(0) ,len(size) {}
//析构
~Queue()
{
delete []q;
q=nullptr;
}
//判空
bool is_empty()
{
if(rear==front)
{
return true;
}
return false;
}
//判满
bool is_full()
{
if((rear+1)%len==front)
{
return true;
}
return false;
}
//入队
void en_queue(int e)
{
if(q==nullptr||is_full())
{
cout<<"入队失败!"<<endl;
return;
}
q[rear]=e;
rear=(rear+1)%len;
return;
}
//出队
void qu_queue()
{
if(q==nullptr||is_empty())
{
cout<<"出队失败!"<<endl;
return;
}
front=(front+1)%len;
return;
}
//遍历
void ou_queue()
{
if(q==nullptr||is_empty())
{
return;
}
int i=front;
while(i!=rear)
{
cout<<q[i]<<"\t";
i=(i+1)%len;
}
cout<<endl;
return;
}
//计算队列元素个数
int num_queue()
{
return (len-front+rear)%len;
}
};
int main()
{
int e,len;
cout<<"请输入队列的大小 ";
cin>>len;
//实例化队列
Queue q1(len);
len-=1;
//入队
while(len--)
{
cout<<"请输入入队元素";
cin>>e;
q1.en_queue(e);
}
cout<<"队列为: "<<endl;
//遍历
q1.ou_queue();
//出队
q1.qu_queue();
cout<<"出队一个元素后"<<endl;
q1.ou_queue();
//计算元素个数
cout<<"队列剩余元素为 "<<endl;
q1.ou_queue();
}