为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下关于c语言销毁栈的函数,大家帮忙看看对不?

请教一下关于c语言销毁栈的函数,大家帮忙看看对不?

跃然一笑 2021-12-15 11:11:19
int DestroyStack(stack &s){int* p;//假设栈的里面的数据为int.栈低和栈顶指针为int*类型--s.top;//s.top总是指向栈的最后一个数据的上一位,--s.top就是使s.top指向实际所存储的数据位置处while(s.base!=s.top){p=s.top;s.top--;free(p);}//这个while循环结束后p指向了栈底的前一个位置。所以我认为就是所存储的第一个数据的位置还木有被free。free(s.top);//等价于free(s.base);return 0;}//不知道写的对不。==还有清空栈的函数==书上写的是下面的这个int ClearStack(stack &s){s.top=s.base;s.stacksize=StackInitSize;return 0;}//可是我觉得清空一个栈,不能只是将一个栈的头指针指向栈低指针,假设栈所开辟了一个数组来存储数据。那这个数组所存储的数据是不是还要清空呢??
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

这两个函数一个是销毁栈DestroyStack,一个是清空栈ClearStack
销毁是把整个栈都释放掉,清空只是把栈里元素清除。
因为你的栈元素是int型基本变量,所以栈元素内容是直接存放在栈空间的,并没有另外申请内存保存栈元素,所以在从栈里移除栈元素时,不需要调用free函数。
实际上你的DestroyStack可以很直接的如下:
int DestroyStack(stack &s)
{
free(s.base); //释放栈空间,这里假设s.base是个指针而不是数组
//如果s结构也是动态申请的,也需要执行free(s);
}
至于ClearStack,书上写的是没问题的,清空栈,不是要释放栈空间,而是把栈里的元素都清除,最直接的做法就是把栈顶指针指向栈底指针,栈顶和栈底指针相同时,就表示栈内无元素,栈空间还是保留,下次可以继续把栈元素压栈和弹栈。

查看完整回答
反对 回复 2021-12-19
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

完全没必要一个一个的执行--s.top。不要狭义地理解“清空”概念,事实上,只需将栈顶指针指向栈底即可。但如果栈是链表结构,则必须一个一个地释放堆空间,直到栈底,既然是数组就没必要了。

查看完整回答
反对 回复 2021-12-19
  • 2 回答
  • 0 关注
  • 308 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号