1、栈
头文件
#ifndef ZHAN_H
#define ZHAN_H
#define MAX 8
#include <iostream>
using namespace std;
class Shu
{
int datatype; //入栈的数据
int *arr; //栈的数组
int top; //记录栈顶元素的下标
public:
//构造函数
Shu();
//析构函数
~Shu();
//判断空
int stack_empty();
//判断满
int stack_full();
//入栈
int stack_push(int data);
//遍历栈
void stack_show();
//出栈
int stack_pop();
//获取栈顶元素
int stack_top();
//求栈的大小
int stack_size();
//清空栈
void stack_free();
};
void xitong();
#endif // ZHAN_H
源文件
#include "zhan.h"
Shu::Shu()
{
datatype=0;
arr = new int[MAX];
top=-1;
}
Shu::~Shu()
{
delete arr;
arr=nullptr;
}
//判断空
int Shu::stack_empty()
{
if(NULL==arr)
{
cout<<"判空失败"<<endl;
return -1;
}
return this->top==-1;
}
//判断满
int Shu::stack_full()
{
if(NULL==arr)
{
cout<<"判满失败"<<endl;
return -1;
}
return this->top==MAX-1;
}
//入栈
int Shu::stack_push(int data)
{
datatype=data;
if(stack_full())
{
cout<<"入栈失败"<<endl;
return -1;
}
//top下标自增
this->top++;
//将输入的函数放入数组中
arr[this->top]=datatype;
cout<<"入栈成功"<<endl;
return 0;
}
//遍历栈
void Shu::stack_show()
{
if(stack_empty())
{
cout<<"遍历失败"<<endl;
return ;
}
//遍历
for(int i=0;i<this->top+1;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
//出栈
int Shu::stack_pop()
{
if(stack_empty())
{
cout<<"出栈失败"<<endl;
return -1;
}
//出栈
cout<<arr[this->top]<<"出栈成功"<<endl;
//自减
this->top--;
return 0;
}
//获取栈顶元素
int Shu::stack_top()
{
if(stack_empty())
{
cout<<"获取栈顶元素失败"<<endl;
return -1;
}
//获取栈顶元素
cout<<"栈顶元素为:"<<arr[top]<<endl;
return 0;
}
//求栈的大小
int Shu::stack_size()
{
if(stack_empty())
{
cout<<"求栈大小失败"<<endl;
return -1;
}
//栈的大小
int size=this->top+1;
cout<<"栈的大小为:"<<size<<endl;
return 0;
}
//清空栈
void Shu::stack_free()
{
this->top=-1;
cout<<"清空栈成功"<<endl;
}
//系统函数
void xitong()
{
//定义一个Shu类型的变量名
Shu zhan;
while(1)
{
END:
system("CLS");
cout<<"**********************"<<endl;
cout<<"********1、入栈********"<<endl;
cout<<"********2、遍历********"<<endl;
cout<<"********3、出栈********"<<endl;
cout<<"********4、栈顶元素*****"<<endl;
cout<<"********5、栈的大小*****"<<endl;
cout<<"********0、退出********"<<endl;
cout<<"**********************"<<endl;
int num;
int data;
cout<<"请输入对应的功能:";
cin>>num;
switch(num)
{
case 1:
cout<<"请输入要加入的数:";
cin>>data;
zhan.stack_push(data);
break;
case 2:
zhan.stack_show();
break;
case 3:
zhan.stack_pop();
break;
case 4:
zhan.stack_top();
break;
case 5:
zhan.stack_size();
break;
case 0:
goto ENDL;
}
int qp;
cout<<"输入清屏(7):";
cin>>qp;
if(qp==7)
{
goto END;
}
}
ENDL:
cout<<"系统退出成功"<<endl;
zhan.stack_free();
}
主函数
#include <iostream>
#include "zhan.h"
using namespace std;
int main()
{
xitong();
return 0;
}
2、循环队列
头文件
#ifndef DUILIE_H
#define DUILIE_H
#define MAX 8
#include <iostream>
using namespace std;
class Shu
{
int datatype; //入队的数据
int *arr; //循环队列的数组
int head; //记录队列头元素的下标
int tail; //记录队列尾元素下标
public:
//构造函数
Shu();
//析构函数
~Shu();
//判断空
int queue_empty();
//判断满
int queue_full();
//入队
int queue_push(int data);
//遍历队
void queue_show();
//出队
int queue_pop();
//求队列的大小
int queue_size();
//清空队
void queue_free();
};
//系统函数
void xitong();
#endif // DUILIE_H
源文件
#include "duilie.h"
Shu::Shu()
{
datatype=0;
arr = new int[MAX];
head=0;
tail=0;
}
Shu::~Shu()
{
delete arr;
arr=nullptr;
}
//判断空
int Shu::queue_empty()
{
if(NULL==arr)
{
cout<<"判空失败"<<endl;
return -1;
}
return this->head==this->tail;
}
//判断满
int Shu::queue_full()
{
if(NULL==arr)
{
cout<<"判满失败"<<endl;
return -1;
}
return (this->tail+1)%MAX==this->head;
}
//入队
int Shu::queue_push(int data)
{
datatype=data;
if(queue_full())
{
cout<<"入队失败"<<endl;
return -1;
}
//将输入的函数放入数组中
arr[this->tail]=datatype;
//尾下标自增
this->tail=(this->tail+1)%MAX;
cout<<"入队成功"<<endl;
return 0;
}
//遍历栈
void Shu::queue_show()
{
if(queue_empty())
{
cout<<"遍历失败"<<endl;
return ;
}
//遍历
for(int i=this->head;i!=this->tail;i=(i+1)%MAX)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
//出队
int Shu::queue_pop()
{
if(queue_empty())
{
cout<<"出队失败"<<endl;
return -1;
}
//出队
cout<<arr[this->head]<<"出队成功"<<endl;
//自增
this->head=(this->tail+1)%MAX;
return 0;
}
//求队列的大小
int Shu::queue_size()
{
if(queue_empty())
{
cout<<"求队列大小失败"<<endl;
return -1;
}
//栈的大小
int size=(this->tail+MAX-this->head)%MAX;
cout<<"队列的大小为:"<<size<<endl;
return 0;
}
//清空栈
void Shu::queue_free()
{
this->head=0;
this->tail=0;
cout<<"清空队列成功"<<endl;
}
//系统函数
void xitong()
{
//定义一个Shu类型的变量名
Shu zhan;
while(1)
{
END:
system("CLS");
cout<<"**********************"<<endl;
cout<<"********1、入队********"<<endl;
cout<<"********2、遍历********"<<endl;
cout<<"********3、出队********"<<endl;
cout<<"********4、队列的大小***"<<endl;
cout<<"********0、退出********"<<endl;
cout<<"**********************"<<endl;
int num;
int data;
cout<<"请输入对应的功能:";
cin>>num;
switch(num)
{
case 1:
cout<<"请输入要加入的数:";
cin>>data;
zhan.queue_push(data);
break;
case 2:
zhan.queue_show();
break;
case 3:
zhan.queue_pop();
break;
case 4:
zhan.queue_size();
break;
case 0:
goto ENDL;
}
int qp;
cout<<"输入清屏(7):";
cin>>qp;
if(qp==7)
{
goto END;
}
}
ENDL:
cout<<"系统退出成功"<<endl;
zhan.queue_free();
}
主函数
#include <iostream>
#include "duilie.h"
using namespace std;
int main()
{
xitong();
return 0;
}
3、思维导图文章来源:https://www.toymoban.com/news/detail-712692.html
文章来源地址https://www.toymoban.com/news/detail-712692.html
到了这里,关于c++实现数据结构栈和队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!