1> 自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量
成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小
头文件
#ifndef STACK_H
#define STACK_H
#include <iostream>
#define max 32using namespace std;
class Stack
{
private:int data[max];int top=-1;
public:Stack();~Stack();Stack(Stack &s);bool stack_empty();bool stack_full();int stack_push(int e);int stack_pop();int stack_top();int stack_size();void stack_clear();
};#endif // STACK_H
源文件
#include <stack.h>
Stack::Stack()
{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()
{if(-1==top)return true;elsereturn false;
}
bool Stack::stack_full()
{if(max-1==top)return true;elsereturn false;
}
int Stack::stack_push(int e)
{top++;data[top]=e;cout<<e<<"入栈成功"<<endl;return 1;
}
int Stack::stack_pop()
{int e=data[top];top--;cout<<e<<"出栈成功"<<endl;return 1;
}
int Stack::stack_top()
{int e=data[top];cout<<"栈顶元素为:"<<e<<endl;return 1;
}
int Stack::stack_size()
{cout<<"栈的大小为:"<<top+1<<endl;return 1;
}
void Stack::stack_clear()
{top=-1;cout<<"栈已清空"<<endl;
}
测试文件
#include <iostream>
#include <stack.h>
using namespace std;int main()
{Stack s;s.stack_push(1);s.stack_push(2);s.stack_push(3);s.stack_push(4);s.stack_size();s.stack_top();s.stack_pop();s.stack_pop();s.stack_pop();s.stack_pop();s.stack_size();s.stack_top();s.stack_clear();return 0;
}
测试结果
2> 自行封装一个循环顺序队列的类,包含私有成员属性:存放队列的数组、队头位置、队尾位置
成员函数完成:构造函数、析构函数、拷贝构造函数、入队、出队、清空队列、判空、判满、求队列大小
头文件
#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>using namespace std;
#define max 32
class Queue
{
private:int data[max];int front;int tail;
public:Queue();~Queue();Queue(Queue &q);bool queue_empty();bool queue_full();int queue_push(int e);int queue_pop();int queue_size();void queue_clear();};#endif // QUEUE_H
源文件
#include <queue.h>
Queue::Queue():front(0),tail(0)
{cout<<"Queue:构造函数"<<endl;
}Queue::~Queue()
{cout<<"Queue:析构函数"<<endl;
}
Queue::Queue(Queue &q):front(q.front),tail(q.tail)
{while(front!=tail){data[front]=q.data[front];front=(front+1)%max;}
}
bool Queue::queue_empty()
{if(front==tail)return true;elsereturn false;
}
bool Queue::queue_full()
{if((tail+1)%max==front)return true;elsereturn false;
}
int Queue::queue_push(int e)
{if(Queue::queue_full()){cout<<"入队失败"<<endl;return -1;}data[tail]=e;tail=(tail+1)%max;cout<<e<<"入队成功"<<endl;return 1;
}
int Queue::queue_pop()
{if(Queue::queue_empty()){cout<<"出队失败"<<endl;return -1;}front=(front+1)%max;cout<<"出队成功"<<endl;return 1;
}
int Queue::queue_size()
{int size=(tail-front+max)%max;cout<<"队长为:"<<size<<endl;return size;
}
void Queue::queue_clear()
{front=tail;cout<<"清空队列"<<endl;return;
}
测试文件
#include <iostream>
#include <queue.h>
using namespace std;int main()
{Queue q;q.queue_push(1);q.queue_push(2);q.queue_push(3);q.queue_push(4);q.queue_size();q.queue_pop();q.queue_pop();q.queue_pop();q.queue_pop();q.queue_size();q.queue_clear();return 0;
}
测试结果
思维导图