m0_75093936 2023-03-16 10:18 采纳率: 100%
浏览 34
已结题

栈采用链式存储,编程实现读取、进栈、出栈等基本操作。

【问题描述】
栈采用链式存储,编程实现读取、进栈、出栈等基本操作。

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2023-03-16 10:28
    关注

    相当于前插法

    /*  链栈
    
              实现操作:
            *1 进栈
            *2 出栈
            *3 读栈顶元素
            *4 判空
    
    代码使用不带头结点的单链表实现链栈,
    入栈、出栈操作相当于单链表在表头的
    插入、删除操作。
                                */
    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    typedef int ElemType;
    struct Node {
        ElemType data;  //栈中元素
        Node* next;     //下一个元素的指针
    };
    typedef Node* LinkStack;
    
    //初始化一个链栈
    void InitLinkStack( LinkStack& S )
    {
        //S永远指向栈顶元素,初始化时栈为空,S初始化为NULL
        S = NULL;
    }
    
    //判空
    bool StackEmpty( LinkStack S )
    {
        if( S == NULL )
            return true;
        return false;
    }
    
    //进栈:将元素x压入堆栈
    bool Push( LinkStack& S, ElemType x )
    {
        Node* temp = new Node;
        temp->data = x;
        if( S == NULL ) {
            S = temp;
            S->next = NULL;
            return true;
        }
        temp->next = S;
        S = temp;
        return true;
    }
    
    //出栈:将栈顶元素出栈,并将其值用x带回
    bool Pop( LinkStack& S, ElemType& x )
    {
        if( S == NULL )
            return false;
        x = S->data;
        Node* toFree = S;
        S = S->next;    //新栈顶
        delete toFree;
        return true;
    }
    
    bool GetTop( LinkStack S, ElemType x )
    {
        if( S == NULL )
            return false;
        x = S->data;
        return true;
    }
    
    void test1()
    {
        LinkStack S;
        InitLinkStack(S);
        for( int i=1; i<=50; i++ ) {
            if( Push(S,i) ) {
                cout << "入栈成功,入栈的元素是:" << i << endl;
            }
            else cout << "入栈失败 " << endl;
        }
    
        cout << "-------------------------------" << endl;
        while( !StackEmpty(S) ) {
            int x = 0;
            Pop(S,x);
            cout << x << endl;
        }
    
    }
    
    int main()
    {
        test1();
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月16日
  • 已采纳回答 3月16日
  • 创建了问题 3月16日

悬赏问题

  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”