关于严蔚敏C语言版数据结构的栈PUSH实现代码

书中关于栈的push的代码如下:StatusPush(Sqstack&S,SElemTypee){if((S.top-S.base)>=S.stacksize)S.bas... 书中关于栈的push的代码如下:Status Push(Sqstack &S,SElemType e) { if ((S.top-S.base)>=S.stacksize) S.base=(ElemType *)malloc (S.base, (S.stacksize+STACKINCREMENT)*sizeof(Elemtype));//A,栈满,追加存储空间 if (!S.base) exit(Overflow}; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return OK;}代码中A段作用是增加存储空间,对顺序栈来说,其中 S.base=(ElemType *)malloc (S.base, (S.stacksize+STACKINCREMENT)*sizeof(Elemtype));中的ElemType是否是笔误?应该为SElemType?另外该句是否可以直接写成:S.stacksize=S.stacksize+STACKINCREMENT;?因为我的理解,对于顺序栈,地址连续,而且若栈S开始就存在,那s.base就是固定的,并不需要重新增加以s.base起始的存储空间了,那这样写不是更简单一些么?当然我看了全段的代码我知道应该不能这么写,哪位朋友帮忙解释讲解一下,谢谢! 展开
 我来答
匿名用户
2013-08-29
展开全部
ElemType是笔误S.base=(ElemType *)malloc (S.base, (S.stacksize+STACKINCREMENT)*sizeof(Elemtype));这个是分配一段内存,长度是(S.stacksize+STACKINCREMENT)*sizeof(Elemtype)这么多字节,因为这个函数是重新分配的,所以也要分配表s.base的存储空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-29
展开全部
ElemType是否是笔误?
这个应该是笔误。。

另外对于追加那个,顺序栈是需要连续地址的内存,打个比方,比如原来栈的容量是从内存地址2000到2100这段空间,现在不够用了,需要增加100,也就是总长度为200的内存空间,如果说2100到2200这段内存中已经有部分被系统分配用于做其他事情,那么程序中再用来作为栈的话,就会出现不可预计的错误。。
S.base=(ElemType *)malloc (S.base, (S.stacksize+STACKINCREMENT)*sizeof(Elemtype));
这一句的作用是先在原基础上新开辟所需要的空间,如果发现已被占用,则在其他内存部分重新寻找一块连续长度为200的且空闲的内存,然后返回base地址。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式