1、
自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量,成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小
stack.h
#ifndef STACK_H
#define STACK_H
#include<iostream>
using namespace std;
class Stack
{
private:
int data[128];
int top;
public:
Stack();
~Stack();
Stack(Stack &s);
//判空
bool stack_empty();
//返回bool类型,真为空,假为非空
//判满
bool stack_full();
//入栈
int stack_in(int num);
//出栈
int stack_out();
//清空栈
bool stack_clear();
//获取栈顶元素
int stack_get_top();
//栈的大小
int stack_size();
//遍历
void stack_show();
};
#endif // STACK_H
stack.cpp
#include"stack.h"
Stack::Stack():top(-1)
{
cout<<"Stack:构造函数"<<endl;
}
Stack::~Stack()
{
cout<<"Stack:析构函数"<<endl;
}
Stack::Stack(Stack &s):top(s.top)
{
for(int i=0; i<=top; i++)
{
data[i] = s.data[i];
}
cout<<"Stack:拷贝构造函数"<<endl;
}
//判空
bool Stack::stack_empty()
{
return -1==top;
}
//判满
bool Stack::stack_full()
{
return 127==top;
}
//入栈
int Stack::stack_in(int num)
{
if(Stack::stack_full())
{
cout<<"栈满满当当"<<endl;
return -1;
}
//指向新的栈顶
top++;
//将要入栈的数据放入数组中
data[top] = num;
return 0;
}
//出栈
int Stack::stack_out()
{
if(Stack::stack_empty())
{
cout<<"栈空空如也"<<endl;
return -1;
}
return data[top--];
}
//清空栈
bool Stack::stack_clear()
{
if(Stack::stack_empty())
{
cout<<"栈空空如也"<<endl;
return false;
}
//清空后栈顶归位
top = -1;
return true;
}
//获取栈顶元素
int Stack::stack_get_top()
{
if(Stack::stack_empty())
{
cout<<"栈空空如也"<<endl;
return -1;
}
return data[top];
}
//求栈的长度
int Stack::stack_size()
{
return top+1;
}
//从栈顶到栈底遍历
void Stack::stack_show()
{
if(Stack::stack_empty())
{
cout<<"栈空空如也"<<endl;
return ;
}
for(int i=top; i>-1; i--)
{
cout << data[i] << " ";
}
cout<<endl;
}
main.cpp
#include <iostream>
#include"stack.h"
using namespace std;
int main()
{
Stack s;
//入栈
s.stack_in(3);
s.stack_in(4);
s.stack_in(8);
s.stack_in(6);
s.stack_in(5);
//展示栈内元素
cout<<"s:";
s.stack_show();
cout<<s.stack_out()<<"出栈成功"<<endl;
//展示栈内元素
cout<<"s:";
s.stack_show();
//获取栈的大小
cout<<"此时栈内元素的数量为:"<<s.stack_size()<<endl;
//栈顶元素为
cout<<"栈顶元素为:"<<s.stack_get_top()<<endl;
//清空栈
s.stack_clear();
cout<<"栈清空成功"<<endl;
//展示栈内元素
cout<<"s:";
s.stack_show();
return 0;
}
测试
2、
自行封装一个循环顺序队列的类,包含私有成员属性:存放队列的数组、队头位置、队尾位置
成员函数完成:构造函数、析构函数、拷贝构造函数、入队、出队、清空队列、判空、判满、求队列大小
3、思维导图