手动实现栈:
#include <iostream>
#include <cstring>
using namespace std;
class Static
{
private:
int *arr; //动态分配栈
int top; //指向栈顶元素
int capacity; //记录栈的最大容量
public:
//有参构造函数
Static(int size) : top(-1), capacity(size)
{
arr = new int[capacity];
cout<<"有参构造"<<endl;
}
//析构函数
~Static()
{
delete[] arr;
cout<<"析构函数"<<endl;
}
//赋值给容器适配器
Static & operator=(const Static &brr);
//访问栈顶元素
int _top();
//栈判空
bool _empty();
//返回容纳的元素数
int _size();
//向栈顶插入元素
void _push(int value);
//删除栈顶元素
void _pop();
};
Static &Static::operator=(const Static &brr)
{
if(this != &brr)
{
delete[] arr; //释放掉原本栈的内存空间
capacity = brr.capacity;
top = brr.top;
arr = new int[capacity]; //重新给栈申请和brr大小一样的空间
for(int i = 0; i <= top; i++)
{
arr[i] = brr.arr[i];
}
}
return *this;
}
int Static::_top()
{
if(_empty()) //判断栈是否为空
{
cout<<"栈为空"<<endl;
return -1;
}
return arr[top];
}
bool Static::_empty()
{
return top == -1;
}
int Static::_size()
{
return capacity;
}
void Static::_push(int value)
{
if(top >= capacity)
{
cout<<"栈满无法插入"<<endl;
return ;
}
arr[++top] = value;
cout<<value<<"插入成功"<<endl;
}
void Static::_pop()
{
if(_empty())
{
cout<<"栈为空"<<endl;
return ;
}
top--; //直接将栈顶减一
cout<<"删除栈顶元素成功"<<endl;
}
int main()
{
Static s1(10); //分配了大小为10的栈空间
s1._push(5); //插入5
s1._push(2); //插入2
s1._push(0); //插入0
cout<<"*************************************"<<endl;
cout<<"栈顶元素是"<<s1._top()<<endl; //访问栈顶元素
cout<<"栈能容纳最大个数是"<<s1._size()<<endl; //返回最大能容纳个数
cout<<"*************************************"<<endl;
s1._pop(); //删除栈顶元素
cout<<"栈顶元素是"<<s1._top()<<endl; //访问栈顶元素
return 0;
}
手动实现队列:
#include <iostream>
using namespace std;
class Queue
{
private:
int* arr; // 队列的动态数组
int front; // 队列头部元素的索引
int rear; // 队列尾部元素的索引
int capacity; // 队列的最大容量
public:
//有参构造函数
Queue(int size):front(0),rear(0),capacity(size)
{
arr = new int[capacity];
cout<<"有参构造函数"<<endl;
}
//析构函数
~Queue()
{
delete[] arr;
cout<<"析构函数"<<endl;
}
//赋值给容器适配器
Queue &operator=(const Queue &brr);
//访问第一个元素
int _front();
//访问最后一个元素
int _back();
//队列判空
bool _empty();
//返回容纳的元素数
int _size();
//向队尾插入元素
void _push(int value);
//删除首个元素
void _pop();
};
Queue &Queue::operator=(const Queue &brr)
{
if(this != &brr)
{
delete [] arr; //释放掉原先队列中的内存
front = brr.front;
rear = brr.rear;
capacity = brr.capacity;
arr = new int[capacity];
for(int i = 0; i < rear; i++)
{
arr[i] = brr.arr[i];
}
}
return *this;
cout<<"拷贝成功"<<endl;
}
int Queue::_front()
{
return arr[front];
}
int Queue::_back()
{
if(_empty())
{
cout<<"队列为空"<<endl;
return -1;
}
return arr[rear-1];
}
bool Queue::_empty()
{
return front == rear;
}
int Queue::_size()
{
return rear - front;
}
void Queue::_push(int value)
{
arr[rear++] = value;
cout<<value<<"尾插成功"<<endl;
}
void Queue::_pop()
{
if(_empty())
{
cout<<"队列为空"<<endl;
return ;
}
cout<<"首个元素"<<arr[front++]<<"删除成功\n"<<endl;
}
int main()
{
Queue q1(10); //分配了10个内存空间
q1._push(5); //尾插5
q1._push(2); //尾插2
q1._push(0); //尾插0
cout<<"最后一个元素是:"<<q1._back()<<endl; //访问最后一个元素
q1._pop(); //删除首个元素5
q1._pop(); //再次删除首个元素,这里就是2了
cout<<"此时第一个元素是:"<<q1._front()<<endl; //访问首个元素,就是0了
return 0;
}
标签:arr,capacity,cout,int,day06,C++,队列,size
From: https://blog.csdn.net/jay__jay_/article/details/142531668