#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;
}
为什么编译不通过 引用那边报错
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 快乐鹦鹉 2021-09-19 19:46关注
Pop函数有问题,你修改了s,并且free了头指针,但Pop函数使用了值参,函数内部修改s值对外部的s是没有影响的。应该使用引用或指针类型
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 vscode的问题提问
- ¥50 切换TabTip键盘的输入法
- ¥15 可否在不同线程中调用封装数据库操作的类
- ¥15 微带串馈天线阵列每个阵元宽度计算
- ¥15 keil的map文件中Image component sizes各项意思
- ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
- ¥15 划分vlan后,链路不通了?
- ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 Centos / PETGEM