Joanofarc_alter 2022-09-23 20:55 采纳率: 92.9%
浏览 20
已结题

链式栈无法进行压栈和出栈

问题遇到的现象和发生背景

链式栈无法进行压栈和出栈

用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef char DataType;
typedef struct Node{
    DataType ele;
    struct Node *link;
}StackNode;
void initStack(StackNode *S){
    S=NULL;


}
bool pushStack(StackNode *S,DataType data){
   StackNode *p  =(StackNode*)malloc(sizeof(StackNode));
   if(p==NULL){
    printf("创建节点失败\n");
    return false;
    exit(1);
   }
   p->ele=data;
   p->link=S;
   S=p;
   return true;





}
bool isEmpty(StackNode *S){
    if(S==NULL){
        return true;
    }else{
        return false;
    }


}
bool pop(StackNode *S,DataType *x){
    if(isEmpty(S)){
        return false;
    }
    StackNode *p=S;
    *x=p->ele;
    S=p->link;
    return true;


}

int main()
{

    StackNode S;
    char x;
    pushStack(&S,'o');

    printf("%c",S.ele);

    return 0;
}


运行结果及报错内容

img

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-09-23 21:55
    关注

    供参考:

    #include <stdio.h>
    #include <stdlib.h>
    //#include <stdbool.h>
    typedef char DataType;
    typedef struct Node{
        DataType ele;
        struct Node *link;
    }StackNode;
    void initStack(StackNode *S){
        S->link = NULL;   //S=NULL;
    }
    bool pushStack(StackNode *S,DataType data){
       StackNode *p  =(StackNode*)malloc(sizeof(StackNode));
       if(p==NULL){
          printf("创建节点失败\n");
          return false;
                           //exit(1);
       }
       p->ele=data;
       p->link = S->link;  //p->link = S;
       S->link = p;        //S=p;
       return true;
    }
    bool isEmpty(StackNode *S){
        if(S->link == NULL){  //if(S==NULL)
            return true;
        }else{
            return false;
        }
    }
    bool pop(StackNode *S,DataType *x){
        if(isEmpty(S)){
            return false;
        }
        StackNode *p=S->link; //*p=S;
        *x=p->ele;
        S->link=p->link;     //S=p->link;
        free(p);             //修改
        return true;
    }
    int main()
    {
        StackNode S;
        char x;
        initStack(&S);   //初始化栈
        //压栈
        pushStack(&S,'a');
        pushStack(&S,'b');
        pushStack(&S,'c');
        pushStack(&S,'d');
    
        //弹栈
        if (pop(&S,&x))
            printf("%c",x);
        else
            printf("\nisEmpty");
    
        if (pop(&S,&x))
            printf("%c",x);
        else
            printf("\nisEmpty");
    
        if (pop(&S,&x))
            printf("%c",x);
        else
            printf("\nisEmpty");
    
        if (pop(&S,&x))
            printf("%c",x);
        else
            printf("\nisEmpty");
    
        if (pop(&S,&x))
            printf("%c",x);
        else
            printf("\nisEmpty");
    
        if (pop(&S,&x))
            printf("%c",x);
        else
            printf("\nisEmpty");
    
        //printf("%c",S.ele);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月23日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址