C语言没有销毁变量的举措,所以不能由程序员用什么语句来销毁结构体变量。和其他基本变量一样,全局结构体变量、static修饰的结构体变量的寿命都与程序的寿命一样长,无法改变;而声明在函数中的自动(auto)结构体变量,在函数被调用时创建,函数退出时自动销毁!
创新互联成立10年来,这条路我们正越走越好,积累了技术与客户资源,形成了良好的口碑。为客户提供网站建设、成都网站制作、网站策划、网页设计、国际域名空间、网络营销、VI设计、网站改版、漏洞修补等服务。网站是否美观、功能强大、用户体验好、性价比高、打开快等等,这些对于网站建设都非常重要,创新互联通过对建站技术性的掌握、对创意设计的研究为客户提供一站式互联网解决方案,携手广大客户,共同发展进步。
这两个函数一个是销毁栈DestroyStack,一个是清空栈ClearStack
销毁是把整个栈都释放掉,清空只是把栈里元素清除。
因为你的栈元素是int型基本变量,所以栈元素内容是直接存放在栈空间的,并没有另外申请内存保存栈元素,所以在从栈里移除栈元素时,不需要调用free函数。
实际上你的DestroyStack可以很直接的如下:
int DestroyStack(stack s)
{
free(s.base); //释放栈空间,这里假设s.base是个指针而不是数组
//如果s结构也是动态申请的,也需要执行free(s);
}
至于ClearStack,书上写的是没问题的,清空栈,不是要释放栈空间,而是把栈里的元素都清除,最直接的做法就是把栈顶指针指向栈底指针,栈顶和栈底指针相同时,就表示栈内无元素,栈空间还是保留,下次可以继续把栈元素压栈和弹栈。
系统调用free释放内存时,是无法判断被释放的内存是否是个结构体,更无法知道结构体内有没有指针、这些指针有没有指向动态申请的内存。如果直接free(A),那么A.base等结构体内指针指向的内存就没有机会被释放,会导致内存泄漏。
1、首先是定义一个这样的函数,名称为【SeqSearch】,返回值为Int。
2、接下来就可以,传入一个数组,一个长度,和一个查找的值。
3、此时,就能从零开始到长度减一个个判断。
4、此时,可以判断,如果找到了就返回当前下标加一。
5、否则就让这个函数返回负一。
6、此时,可以在Main函数中配合运行测试。
7、输出对于每次删除操作输出一行,如果k不合法(k大于n或者k为0),输出 -1, 否则输出删除的元素。