day3_C++
- 思维导图
- 用C++的类完成数据结构 栈的相关操作
- 用C++的类完成数据结构 循环队列的相关操作
思维导图
用C++的类完成数据结构 栈的相关操作
stack.h
#ifndef STACK_H
#define STACK_H
#include <iostream>
#include <cstring>
using namespace std;
typedef int datatype;
#define MAX 5
class Stack
{
public:
/*构造函数*/
Stack();
/*拷贝构造函数*/
Stack(const Stack& others);
/*析构函数*/
~Stack();
/*判满 true 满 */
bool is_full();
/*判满 true 空*/
bool is_empty();
/*入栈*/
void in_stack(datatype e);
/*出栈*/
datatype out_stack();
/*清空栈*/
void clear_stack();
/*求栈顶元素*/
datatype get_stackTop_E();
/*求栈的大小*/
void get_stackSize();
private:
int top;
datatype *data;
};
#endif // STACK_H
stack.cpp
#include "stack.h"
Stack::Stack():data(new int[MAX]),top(-1)
{
memset(this->data,0,MAX);
//在堆区申请max个int大小的空间
cout<<"栈容器初始化成功"<<endl;
}
Stack::Stack(const Stack& others):data(new int[MAX]),top(others.top)
{
//深拷贝,将堆区内容也拷贝进来
for(int i = 0;i<MAX-1;i++){
this->data[i] = others.data[i];
}
cout<<"拷贝完成"<<endl;
}
Stack::~Stack()
{
//释放堆区数据
delete []data;
cout<<"析构完成"<<endl;
}
bool Stack::is_full()
{
if(this->top ==MAX-1)
return true;
else
return false;
}
bool Stack::is_empty()
{
if(this->top == -1)
return true;
else
return false;
}
void Stack::in_stack(datatype e)
{
if(this->is_full()==false){
this->top++;
this->data[this->top] = e;
cout<<"入栈成功"<<endl;
}else{
cout<<"入栈失败,栈满"<<endl;
}
}
datatype Stack::out_stack()
{
if(this->is_empty()==false){
datatype temp = this->data[this->top];
this->top--;
return temp;
}else{
cout<<"出栈失败,栈空"<<endl;
return NULL;
}
}
void Stack::clear_stack()
{
if(this->is_empty()==false){
this->top=-1;
cout<<"清空成功"<<endl;
}else{
cout<<"栈空,无需清理"<<endl;
}
}
datatype Stack::get_stackTop_E()
{
if(this->is_empty()==true)
return NULL;
return this->data[this->top];
}
void Stack::get_stackSize(){
cout<<"栈中有元素 "<<this->top+1<<"个"<<endl;
}