鱼C论坛

 找回密码
 立即注册
查看: 4343|回复: 5

C语言栈的问题

[复制链接]
发表于 2012-12-12 19:43:22 | 显示全部楼层 |阅读模式
3鱼币
  1. #include "stdio.h"
  2. #include "malloc.h"
  3. struct str
  4. {
  5. char *top;
  6. char *di;
  7. };
  8. //创建栈
  9. void ch(struct str *p)
  10. {
  11. p->di=(char *)malloc(sizeof(struct str));
  12. p->top=p->di;
  13. }
  14. //进入栈
  15. void push(struct str *p,char c)
  16. {
  17. *(p->top)=c;
  18. p->top++;
  19. }
  20. //出栈
  21. void pop(struct str *p,char *c)
  22. {
  23. if(p->top == p->di) return;
  24. *c=*--(p->top);
  25. }
  26. void main()
  27. {
  28. char c='f';
  29. char d;
  30. struct str p;
  31. ch(&p);
  32. push(&p,c); //进栈
  33. pop(&p,&d); //出栈
  34. printf("出栈:%c\n",d);
  35. printf("栈的大小%d\n",p.top-p.di);//计算栈大小
  36. free(p.di);

  37. }
复制代码


*(p->top)=c;
*c=*--(p->top);
这两句是什么意思

最佳答案

查看完整内容

*(p->top) = c; 意思是: 先将c的值赋给当前的栈指针, 然后将栈指针指向下一个单元. 这里为什么先赋值,然后++栈指针? 那是因为栈指针指向的是下一个空闲的单元. *c = *--(p->top) 意思是: 出栈之前先得将栈顶指针减1, 然后将栈顶指针所指的单元内的内容,赋值给c. 让c返回. 也就是说. 栈顶指针指向的是下一个空闲单元. ( 你可以看看严蔚敏的数据结构)
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-12-12 19:43:23 | 显示全部楼层
*(p->top) = c;  意思是:   先将c的值赋给当前的栈指针,  然后将栈指针指向下一个单元.
这里为什么先赋值,然后++栈指针?   那是因为栈指针指向的是下一个空闲的单元.

*c = *--(p->top)
意思是:  出栈之前先得将栈顶指针减1, 然后将栈顶指针所指的单元内的内容,赋值给c.  让c返回.
也就是说. 栈顶指针指向的是下一个空闲单元. (  你可以看看严蔚敏的数据结构)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-12 20:20:46 | 显示全部楼层
没到,坐等答案....
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-12 20:40:31 | 显示全部楼层
*(p->top)=c;将栈顶元素赋值为c变量的值
*c=*--(p->top); 将栈顶元素取出给*c,自身指针指向下一元素,即下一元素变成栈顶
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-12 21:51:12 | 显示全部楼层
让我考率一下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-19 09:10:02 | 显示全部楼层
对栈的操作:进栈时先拿到入栈的值后移动栈指针,出栈时先移动栈指针后取值!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-16 20:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表