C++&QT-顺序栈

目录

1.seqstack.h

2.seqstack.cpp

3.main.c


1.seqstack.h

#ifndef SEQSTACK_H
#define SEQSTACK_H
//手动实现顺序栈,要求实现数据结构中,所有栈的相关操作
#define MAXSIZE 10

template <typename T>
class Seqstack
{
private:
    int top; // 栈顶下标
    T data[MAXSIZE]; // 数据域

public:
    // 无参构造函数, 初始化栈
    Seqstack();
    // 析构函数
    ~Seqstack();
    // 判断栈空
    bool isempty();

    // 判断栈满
    bool isfull();

    // 入栈
    bool push(T value);

    // 出栈
    bool pop(T &element);

    // 获取栈顶元素
    bool get_top(T &element);

    // 清空栈
    void close_stack();

};

#endif // SEQSTACK_H

2.seqstack.cpp

#include "seqstack.h"
#include <iostream>

using namespace std;

// 无参构造函数, 初始化栈
template <typename T>
Seqstack<T>::Seqstack() : top(-1){}

// 析构函数
template <typename T>
Seqstack<T>::~Seqstack() {}

// 判断栈空
template <typename T>
bool Seqstack<T>::isempty(){
    return top == -1;
}

// 判断栈满
template <typename T>
bool Seqstack<T>::isfull(){
    return top == MAXSIZE - 1;
}

// 入栈
template <typename T>
bool Seqstack<T>::push(T value){
    // 判断栈满
    if (isfull ()){
        cout << "栈满,入栈失败" << endl;
        return false;
    } else {
        data[++top] = value; // 入栈,top向后移动
        return true;
    }
}

// 出栈
template <typename T>
bool Seqstack<T>::pop(T &element){
    // 判断栈空
    if (isempty ()){
        cout << "栈空,出栈失败" << endl;
        return false;
    } else {
        element = data[top--]; // 出栈栈顶元素,top向前移动
        return true;
    }
}

// 获取栈顶元素
template <typename T>
bool Seqstack<T>::get_top(T &element){
    // 判断栈空
    if (isempty ()){
        cout << "栈空,获取栈顶元素失败" << endl;
        return false;
    } else {
        element = data[top]; // 获取栈顶元素
        return true;
    }
}

// 清空栈
template <typename T>
void Seqstack<T>::close_stack(){
    top = -1;
}

3.main.c

#include "seqstack.h"
#include <iostream>


using namespace std;

int main()
{
    cout << "****************栈****************" << endl;
    // 创建栈对象
    Seqstack<int> s;
    int num = 0;
    // 循环入栈
    for (int i = 0; i < MAXSIZE; ++i) {
        cout << "请输入元素:";
        cin >> num;
        // 入栈
        s.push (num);
    }

    // 出栈
    for (int i = 0; i < MAXSIZE; ++i) {
        // 入栈
        s.pop (num);
        cout << num << "\t";
    }
    cout << endl;

    s.pop (num); // 出栈


    return 0;
}

猜你喜欢

转载自blog.csdn.net/liu319293960_/article/details/130351957
今日推荐