Cpp/Qtday060913cpp基础

目录

将栈类实现成模板类

代码

效果

将队列类实现成模板类

代码

效果

思维导图


将栈类实现成模板类
代码
#include 

using namespace std;

template
class Stack
{
private:
    T data[128];
    int top;
public:
    Stack();
    //Stack(T unit);
    ~Stack();
    Stack(Stack &s);
    //判空
    bool stack_empty();
    //返回布尔类型,真为空,假为非空
    //判满
    bool stack_full();
    //返回布尔类型,真为满,假为非满
    //入栈
    int stack_in(T unit);
    //出栈
    T stack_out();
    //清空栈
    bool stack_clear();
    //获取栈顶元素
    T stack_get_top();
    //求栈的大小
    int stack_size();
    //为了便于观察现象,加一个展示栈内元素的函数,从栈顶向栈底
    void stack_show();
};
template
Stack::Stack():top(-1){
    cout<<"Stack:无参构造"<
//Stack::Stack(T unit):data(unit),top(0){
//    cout<<"Stack:无参构造"<
Stack::~Stack(){
    cout<<"Stack:析构函数"<
Stack::Stack(Stack &s):top(s.top){
    for(int i=0; i<=top; i++){
        data[i] = s.data[i];
    }
    cout<<"Stack:拷贝构造函数"<
bool Stack::stack_empty(){
    //top正好记录栈顶元素的下标,所以当top为-1时,栈空
    return -1 == top;
}
//判满
template
bool Stack::stack_full(){
    //top正好记录栈顶元素的下标,所以当top为127时,栈满
    return 127 == top;
}
//入栈
template
int Stack::stack_in(T unit){
    //如果栈满,则拒绝入栈
    if(Stack::stack_full()){
        cout<<"栈已满"<
T Stack::stack_out(){
    //判断栈是否为空,为空则无法出栈
    if(Stack::stack_empty()){
        cout<<"栈已空"<
bool Stack::stack_clear(){
    //如果栈本身为空则无需清空
    if(Stack::stack_empty()){
        cout<<"栈已空"<
T Stack::stack_get_top(){
    //首先栈要非空
    if(Stack::stack_empty()){
        cout<<"栈已空"<
int Stack::stack_size(){
    //已知,top变量记录了栈顶元素的下标,所以要求栈中的元素数量,只需将top+1就可得到
    return top+1;
}
//为了便于观察现象,加一个展示栈内元素的函数,从栈顶向栈底
template
void Stack::stack_show(){
    //首先栈要非空
    if(Stack::stack_empty()){
        cout<<"栈为空"<-1; i--){
        cout << data[i] << "  ";
    }
    cout< s1;
    //入栈
    s1.stack_in(4);
    //展示栈内元素
    cout<<"s1:";
    s1.stack_show();
    s1.stack_in(3);
    //展示栈内元素
    cout<<"s1:";
    s1.stack_show();
    s1.stack_in(9);
    //展示栈内元素
    cout<<"s1:";
    s1.stack_show();
    s1.stack_in(6);
    //展示栈内元素
    cout<<"s1:";
    s1.stack_show();
    s1.stack_in(1);
    //展示栈内元素
    cout<<"s1:";
    s1.stack_show();
    s1.stack_in(5);
    //展示栈内元素
    cout<<"s1:";
    s1.stack_show();
    s1.stack_in(5);
    //展示栈内元素
    cout<<"s1:";
    s1.stack_show();
    s1.stack_in(7);
    //展示栈内元素
    cout<<"s1:";
    s1.stack_show();
    //出栈
    cout< s2;
    //入栈
    s2.stack_in('H');
    //展示栈内元素
    cout<<"s2:";
    s2.stack_show();
    s2.stack_in('e');
    //展示栈内元素
    cout<<"s2:";
    s2.stack_show();
    s2.stack_in('l');
    //展示栈内元素
    cout<<"s2:";
    s2.stack_show();
    s2.stack_in('l');
    //展示栈内元素
    cout<<"s2:";
    s2.stack_show();
    s2.stack_in('o');
    //展示栈内元素
    cout<<"s2:";
    s2.stack_show();
    s2.stack_in(' ');
    //展示栈内元素
    cout<<"s2:";
    s2.stack_show();
    s2.stack_in('w');
    //展示栈内元素
    cout<<"s2:";
    s2.stack_show();
    s2.stack_in('o');
    //展示栈内元素
    cout<<"s2:";
    s2.stack_show();
    //出栈
    cout<
效果

由于终端不方便一次性全部展示,因此,s1,s2的完整现象需要分两次展示

Cpp/Qtday060913cpp基础_第1张图片

Cpp/Qtday060913cpp基础_第2张图片

将队列类实现成模板类
代码
#include 

using namespace std;

template
class Queue
{
private:
    T data[12];
    int head;
    int tail;

public:
    //构造函数
    Queue();
    //析构函数
    ~Queue();
    //拷贝构造函数
    Queue(Queue &q);
    //判空
    bool queue_empty();
    //判满
    bool queue_full();
    //入队
    int queue_in(T unit);
    //出队
    T queue_out();
    //清空队列
    bool queue_clear();
    //求队列大小
    int queue_size();
    //为了便于观察现象,加一个展示队列元素的函数,从队头到队尾
    void queue_show();
};

//构造函数
template
Queue::Queue():head(0),tail(0){
    cout<<"Queue:构造函数"<
Queue::~Queue(){
    cout<<"Queue:析构函数"<
Queue::Queue(Queue &q):head(q.head),tail(q.tail){
    int h = head;
    while(h!=tail){
        data[h] = q.data[h];
        h = (h+1)%12;
    }
    cout<<"Queue:拷贝构造函数"<
bool Queue::queue_empty(){
    //当队列的头变量与尾变量的值相同时,队列为空
    return head == tail;
}

//判满
template
bool Queue::queue_full(){
    //队尾变量记录的下标中是不保存变量的,以便操作与计数
    //因此,当队尾变量的值比对头变量的值小1或者-11的时候,队满
    return (tail+1)%12 == head;
}

//入队
template
int Queue::queue_in(T unit){
    //要能入队,首先队列不能为满
    if(Queue::queue_full()){
        cout<<"队列已满,无法入队"<
T Queue::queue_out(){
    //要能出队,首先队列不能为空
    if(Queue::queue_empty()){
        cout<<"队列已空,无法入队"<
bool Queue::queue_clear(){
    //若队列为空则无需清空
    if(Queue::queue_empty()){
        cout<<"队列已空,无需清空"<
int Queue::queue_size(){
    //根据队首队尾的位置即可求出队列大小
    return (tail + 12 - head)%12;
}

//为了便于观察现象,加一个展示队列元素的函数,从队头到队尾
template
void Queue::queue_show(){
    //若队列为空则提示队列为空
    if(Queue::queue_empty()){
        cout<<"队列为空"< q1;
    //入队
    q1.queue_in(4);
    //展示
    cout<<"q1: ";
    q1.queue_show();
    //入队
    q1.queue_in(3);
    //展示
    cout<<"q1: ";
    q1.queue_show();
    //入队
    q1.queue_in(9);
    //展示
    cout<<"q1: ";
    q1.queue_show();
    //入队
    q1.queue_in(6);
    //展示
    cout<<"q1: ";
    q1.queue_show();
    //入队
    q1.queue_in(1);
    //展示
    cout<<"q1: ";
    q1.queue_show();
    //入队
    q1.queue_in(5);
    //展示
    cout<<"q1: ";
    q1.queue_show();
    //入队
    q1.queue_in(5);
    //展示
    cout<<"q1: ";
    q1.queue_show();
    //入队
    q1.queue_in(7);
    //展示
    cout<<"q1: ";
    q1.queue_show();

    //出队
    cout< q2;
    //入队
    q2.queue_in('H');
    //展示
    cout<<"q2: ";
    q2.queue_show();
    //入队
    q2.queue_in('e');
    //展示
    cout<<"q2: ";
    q2.queue_show();
    //入队
    q2.queue_in('l');
    //展示
    cout<<"q2: ";
    q2.queue_show();
    //入队
    q2.queue_in('l');
    //展示
    cout<<"q2: ";
    q2.queue_show();
    //入队
    q2.queue_in('o');
    //展示
    cout<<"q2: ";
    q2.queue_show();
    //入队
    q2.queue_in('W');
    //展示
    cout<<"q2: ";
    q2.queue_show();
    //入队
    q2.queue_in('o');
    //展示
    cout<<"q2: ";
    q2.queue_show();
    //入队
    q2.queue_in('r');
    //展示
    cout<<"q2: ";
    q2.queue_show();

    //出队
    cout<
效果

由于终端不方便一次性全部展示,因此,s1,s2的完整现象需要分两次展示

Cpp/Qtday060913cpp基础_第3张图片

Cpp/Qtday060913cpp基础_第4张图片

思维导图

你可能感兴趣的:(c++,算法,开发语言)