栈的实现
头文件
#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;
}
思维导图