栈的实现
头文件
#ifndef MY_STACK_H
#define MY_STACK_H
#include <iostream>
using namespace std;
class my_stack
{
private:
int *base;//动态栈指针
int top;//栈顶元素
int size;//栈大小
public:
my_stack();//无参构造
my_stack(int size):top(-1),size(size)
{
base = new int[this->size];
cout<<"有参构造"<<endl;
}
~my_stack()
{
delete []base;
cout<<"析构函数"<<endl;
}
//赋值
my_stack & operator=(const my_stack &str);
//访问栈顶元素
int my_top();
//检查容器是否为空
bool my_empty();
//返回容纳元素数
int my_size();
//插入栈顶
void my_push(int value);
//删除栈顶
void my_pop();
};
#endif // MY_STACK_H
源文件
#include "my_stack.h"
//赋值
my_stack & my_stack::operator=(const my_stack &str)
{
if(this != &str)
{
delete []base;
this->size = str.size;
this->top = str.top;
base = new int[size];
for(int i = 0;i<size;i++)
{
base[i] = str.base[i];
}
}
return *this;
}
//访问栈顶元素
int my_stack::my_top()
{
if(my_empty())
{
cout<<"栈为空"<<endl;
return -1;
}
return base[top];
}
//检查容器是否为空
bool my_stack::my_empty()
{
return top == -1;
}
//返回容纳元素数
int my_stack::my_size()
{
return top+1;
}
//插入栈顶
void my_stack::my_push(int value)
{
if(top >= size)
{
cout<<"栈满"<<endl;
return;
}
base[++top] = value;
cout<<value<<"插入成功"<<endl;
}
//删除栈顶
void my_stack::my_pop()
{
if(my_empty())
{
cout<<"栈为空"<<endl;
return;
}
top--;
cout<<"删除栈顶成功"<<endl;
}
主程序
#include "my_stack.h"
int main()
{
my_stack s(10);
s.my_push(23);
s.my_push(45);
s.my_push(74);
cout<<"栈顶 = "<<s.my_top()<<endl;
cout<<"栈元素个数="<<s.my_size()<<endl;
s.my_pop();
cout<<"删除栈顶后栈元素个数="<<s.my_size()<<endl;
return 0;
}
队列的实现
头文件
#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
using namespace std;
class queue
{
private:
int *base;//队列动态数组
int front;//头部
int rear;//尾部
int size;//容器大小
public:
queue();//无参构造
queue(int size):front(0),rear(0),size(size)//有参构造
{
base = new int[size];
cout<<"有参构造"<<endl;
}
//析构函数
~queue()
{
delete [] base;
cout<<"析构函数"<<endl;
}
//赋值
queue &operator=(const queue &str);
//访问第一个元素
int my_front();
//访问最后一个元素
int my_back();
//检查容器是否为空
bool my_empty();
//返回容器的元素数
int my_size();
//向队尾插入元素
void my_push(int value);
//删除首个插入元素
void my_pop();
};
#endif // QUEUE_H
源文件
#include "queue.h"
//赋值
queue &queue::operator=(const queue &str)
{
if(this != &str)
{
delete []base;
front = str.front;
rear = str.rear;
size = str.size;
base = new int[size];
for(int i = front;i<rear;i++)
{
base[i] = str.base[i];
}
}
return *this;
}
//访问第一个元素
int queue::my_front()
{
if(my_empty())
{
cout<<"队列为空"<<endl;
return -1;
}
return base[front];
}
//访问最后一个元素
int queue::my_back()
{
if(my_empty())
{
cout<<"队列为空"<<endl;
return -1;
}
return base[rear-1];
}
//检查容器是否为空
bool queue::my_empty()
{
return rear == front;
}
//返回容器的元素数
int queue::my_size()
{
return rear-front;
}
//向队尾插入元素
void queue::my_push(int value)
{
base[rear++] = value;
cout<<"插入成功"<<endl;
}
//删除首个插入元素
void queue::my_pop()
{
if(my_empty())
{
cout<<"队列为空"<<endl;
return;
}
cout<<"首元素"<<base[front++]<<"删除成功"<<endl;
}
主程序
#include "queue.h"
int main()
{
queue s(10);
s.my_push(14);
s.my_push(24);
s.my_push(41);
s.my_push(4);
cout<<"最后一个元素是"<<s.my_back()<<endl;
s.my_pop();
cout<<"第一个元素"<<s.my_front()<<endl;
return 0;
}
思维导图