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 AE SDK插件开发,获取关键帧值得问题
  • ¥15 谁知道这个咋搞的吗,有偿
  • ¥20 基于spring boot、的scorm
  • ¥15 往复密封问题的两个问题
  • ¥15 DAC函数和STM32
  • ¥15 任务是接收数据并把数据写入DAC7311,这些代码能实现此功能吗
  • ¥15 分析FP -Growth代码运行内存太大而无法运行的原因
  • ¥20 qtcreat 使用msvc编译器开发软件运行时字体锯齿感严重
  • ¥15 为何显示keyerror fruit
  • ¥15 imageware粗糙度表面