我用vs2010实现链栈的基本操作,最后我想打印出所有元素,为什么出来的是乱码啊
我用vs2010实现链栈的基本操作,最后我想打印出所有元素,为什么出来的是乱码啊
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 技术专家团-小桥流水 2022-03-17 14:11关注
你的代码错误很多,你的节点都是往链表前面插入的,如果不带头节点,初始化函数就没有任何意义了。
带头和不带头的代码都给你写了,如下:
带头节点的代码:#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct LinkStack { struct LinkStack* next; ElemType data; }LS; //初始化 LS* InitStack(LS* s) { s = (LS*)malloc(sizeof(LS)); s->next = 0; return s; } //打印所有元素 void my_printf(LS* s) { LS* p; if (s == 0) { printf("链表为空\n"); return; } p = s->next; while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); } //入栈 void PushStack(LS* s, ElemType x) { LS* p = (LS*)malloc(sizeof(LS)); p->data = x; p->next = s->next; s->next = p; } //出栈 void PopStack(LS* s) { LS* p; if (s == 0 && s->next == 0) { printf("栈为空\n"); return ; } p = s->next; s->next = p->next; free(p); } int main() { LS* s=0; s = InitStack(s); PushStack(s, 2); PushStack(s, 4); PushStack(s, 3); my_printf(s); return 0; }
不带头的代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct LinkStack { struct LinkStack* next; ElemType data; }LS; //打印所有元素 void my_printf(LS* s) { LS* p; if (s == 0) { printf("链表为空\n"); return; } p = s; while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); } //入栈 LS* PushStack(LS* s, ElemType x) { LS* p = (LS*)malloc(sizeof(LS)); p->data = x; p->next = s; return p; } //出栈 LS* PopStack(LS* s) { LS* p; if (s == 0 ) { printf("栈为空\n"); return 0; } p = s->next; free(s); s = p; return s; } int main() { LS* s=0; //s = InitStack(s); s = PushStack(s, 2); s = PushStack(s, 4); s = PushStack(s, 3); my_printf(s); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 微信会员卡等级和折扣规则
- ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
- ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
- ¥15 gdf格式的脑电数据如何处理matlab
- ¥20 重新写的代码替换了之后运行hbuliderx就这样了
- ¥100 监控抖音用户作品更新可以微信公众号提醒
- ¥15 UE5 如何可以不渲染HDRIBackdrop背景
- ¥70 2048小游戏毕设项目
- ¥20 mysql架构,按照姓名分表
- ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分