克己ovo 2021-09-19 19:36 采纳率: 90%
浏览 53
已结题

为什么编译不通过 引用那边报错


#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define ElemType int
//定义栈的存储类型 
typedef struct Nodestack *ListStack;
struct Nodestack{
    ElemType x;//储存数据
    struct Nodestack *next; //指针 
    struct Nodestack *right;
}Stack;
//初始化链栈
//1引用方式初始化
//void InitStack(ListStack &s){
//    s = (ListStack)malloc(sizeof(Stack));
//    s->next = NULL;
//    printf("初始化成功!\n");
//}

//2指针方式初始化 
ListStack InitStack(ListStack s){
    s = (ListStack)malloc(sizeof(Stack));
    s->next = NULL;
    printf("初始化成功!\n");
    return s;
} 

//判断是否为空栈
bool ListStackEmpty(ListStack s){
    if(s->next ==NULL)
    return true;
    return false;
} 
//将数据压入栈内 
/* 用头插法更合适 出栈的时候只需弹出第一个节点即可*/
void Push(ListStack s ,ElemType data){
    ListStack p;
    ListStack t;
    t = s;//防止s指向发生改变 
    p = (ListStack)malloc(sizeof(Stack));
    p-> x = data;
    p->next = t->next;
    t->next = p;
    printf("入栈成功\n");
}
//将数据弹出栈
void Pop(ListStack s,ElemType& temp){
    if(s->next==NULL){
        printf("栈空\n");
        return;
    }else{
    ListStack p;
    p = s;
    temp = s->x;
    s=s->next;
    free(p);
    printf("弹出成功/n"); 
    } 
    
} 
int main(){
    ListStack s;
    ElemType temp; 
    s = InitStack(s);
    ElemType data;
    printf("请输入插入数据:\n"); 
    scanf("%d",&data);
    Push(s,data); 
    Pop(s,&temp); 
    return 0; 
}
  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2021-09-19 19:46
    关注

    Pop函数有问题,你修改了s,并且free了头指针,但Pop函数使用了值参,函数内部修改s值对外部的s是没有影响的。应该使用引用或指针类型

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月27日
  • 已采纳回答 9月19日
  • 创建了问题 9月19日

悬赏问题

  • ¥15 vscode的问题提问
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM