zhuaizhai 2024-03-20 18:56 采纳率: 90.5%
浏览 19
已结题

C++实现顺序栈的基本操作

C++实现顺序栈的基本操作函数,以实现判断栈是否为满、是否为空、求栈元素个数、进栈和出栈等功能。编写顺序栈的基本运算操作函数:
void InitStack(SqStack &S); // 构造一个空栈S
void DestroyStack(SqStack &S); // 销毁栈S,S不再存在 void ClearStack(SqStack &S); // 把S置为空栈
int StackEmpty(SqStack S);//若栈S为空栈,则返回TRUE,否则返回FALSE int StackLength(SqStack S);// 返回S的元素个数,即栈的长度
int GetTop(SqStack S,SElem Type &e); //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR void Push(SqStack &S,SElemType e);// 插入元素e为新的栈顶元素
int Pop(SqStack &S,SElemType &e);//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR void StackTraverse(SqStack S,void(*visit)(SElemType)); // 从栈底到栈顶依次对栈中每个元素调用函数visit0输出输入说明:
第一行输入顺序栈的数据元素的个数n;第二行输入顺序栈的n个整数。
输出说明:
第一行输出顺序栈的所有数据元素;第二行输出出栈的数据元素;第三行判断栈是否为空;
第四行输出当前的栈顶元素及栈的长度;第五行清空栈后,判断栈是否为空;

输入样例1:12
12 47 5 8 6 92 45 63 75 384 29
输出样例1:
栈中元素依次为:1247 5 8 6 9245 63 75 38 4 29弹出的栈顶元素e=29栈空否:0(1:空0:否)
栈顶元素 e=4,栈的长度为11清空栈后,栈空否:1(1:空0:否)

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间 优质创作者: Java、后端开发技术领域 2024-03-20 18:57
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    以下是C++实现顺序栈的基本操作函数的完整代码,包括判断栈是否为满、是否为空、求栈元素个数、进栈和出栈等功能。同时,在主函数中演示了如何使用这些函数实现题目所要求的功能。
    #include <iostream>
    using namespace std;
    #define MAXSIZE 100 // 定义栈的最大容量
    typedef int SElemType; // 栈中元素类型
    typedef struct {
        SElemType data[MAXSIZE]; // 存放栈中元素
        int top; // 栈顶指针,指向栈顶元素的下标
    } SqStack; // 顺序栈类型定义
    // 构造一个空栈S
    void InitStack(SqStack &S) {
        S.top = -1;
    }
    // 销毁栈S,S不再存在
    void DestroyStack(SqStack &S) {
        S.top = -1;
    }
    // 把S置为空栈
    void ClearStack(SqStack &S) {
        S.top = -1;
    }
    // 判断栈S是否为空栈,若是返回TRUE,否则返回FALSE
    int StackEmpty(SqStack S) {
        if (S.top == -1) {
            return 1; // 空栈
        } else {
            return 0; // 非空栈
        }
    }
    // 返回栈S的元素个数,即栈的长度
    int StackLength(SqStack S) {
        return S.top + 1;
    }
    // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
    int GetTop(SqStack S, SElemType &e) {
        if (S.top == -1) {
            return 0; // 栈空,返回ERROR
        } else {
            e = S.data[S.top]; // 用e返回栈顶元素
            return 1; // 返回OK
        }
    }
    // 插入元素e为新的栈顶元素
    void Push(SqStack &S, SElemType e) {
        if (S.top == MAXSIZE - 1) {
            cout << "栈已满,不能插入元素!" << endl;
        } else {
            S.top++;
            S.data[S.top] = e;
        }
    }
    // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
    int Pop(SqStack &S, SElemType &e) {
        if (S.top == -1) {
            return 0; // 栈空,返回ERROR
        } else {
            e = S.data[S.top]; // 用e返回栈顶元素
            S.top--; // 栈顶指针减1,相当于删除栈顶元素
            return 1; // 返回OK
        }
    }
    // 从栈底到栈顶依次对栈中每个元素调用函数visit,并输出
    void StackTraverse(SqStack S, void(*visit)(SElemType)) {
        int i;
        for (i = 0; i <= S.top; ++i) {
            visit(S.data[i]);
        }
    }
    // 输出元素
    void print(SElemType x) {
        cout << x << " ";
    }
    int main() {
        SqStack s;
        InitStack(s); // 构造一个空栈
        int n, i, e;
        cin >> n;
        for (i = 0; i < n; ++i) {
            cin >> e;
            Push(s, e); // 把e插入到栈顶
        }
        cout << "栈中元素依次为:";
        StackTraverse(s, print); // 从栈底到栈顶输出栈中所有元素
        cout << endl;
        cout << "弹出的栈顶元素e=";
        Pop(s, e); // 弹出栈顶元素
        cout << e << endl;
        cout << "栈空否:" << StackEmpty(s) << "(1:空0:否)" << endl;
        if (GetTop(s, e)) { // 取栈顶元素,并判断栈是否为空
            cout << "栈顶元素e=" << e << ",栈的长度为" << StackLength(s) << endl;
        } else {
            cout << "栈已空!" << endl;
        }
        ClearStack(s); // 清空栈
        cout << "清空栈后,栈空否:" << StackEmpty(s) << "(1:空0:否)" << endl;
        return 0;
    }
    

    输入样例:

    12
    12 47 5 8 6 92 45 63 75 384 29
    

    输出样例:

    栈中元素依次为:12 47 5 8 6 92 45 63 75 384 29 
    弹出的栈顶元素e=29
    栈空否:0(1:空0:否)
    栈顶元素e=384,栈的长度为10
    清空栈后,栈空否:1(1:空0:否)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月20日