扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1、将10个整数存入数组,删除数组中的某个元素。例如,数组中有1,2,3,4,5,6,7,8,9,10共10个元素,删除第5个元素后,数组中剩下9个元素1,2,3,4,6,7,8,9,10。
创新互联建站专业为企业提供集安网站建设、集安做网站、集安网站设计、集安网站制作等企业网站建设、网页设计与制作、集安企业网站模板建站服务,10多年集安做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
2、方法:删除就是将其下标所在位置的中的内容置为空(也就是0),然后从此位置开始,后面的内容前移,再把最后那个位置的置为空(就是0)。前移无非就是 类似 arr[ i - 1] = arr[ i ] 这个意思。
3、办法不至一个,比较直观的是找到要删除的元素后,将它后面的元素依次向前移动(拷贝)一位。
4、比如:a[4]要删除第二个元素。那么把a[1]= a[2];a[2]= a[3];最后一个不要动,也最好别去访问它,就相当于把第二个元素删除了。
如果是局部函数栈空间中的数组,有程序自动回收。void f(){int a[2] = {1,2}; //局部栈空间上的数组,程序自动回收}如果是动态内存分配 的数组,在c语言中使用free()将其释放。
其实用递归算菲波拉契数列很慢的,很快就栈溢出了。
你这个销毁函数本身没有问题,它是正确的,问题产生的根源在你的链表生成函数。你的链表生成函数的入参是一个指针,作为形参,你能改变它指向的东西,但是不能改变形参本身体。
局部变量在函数调用完就会擦除(应该跟程序的联系),可是你使用局部变量时存放的是栈段,栈段的顺序是后进先出,而你刚好申请了相同大小的变量空间,系统直接就把那块空间又分配给你了,而里面的内容并没擦除。
是InitStack(s)吧?程序里就没有InitSqlist()。因为栈内容没有初始化,所以访问那个s-top时就出错了,并不是分配内存的malloc的问题。
因为删除或者插入操作有时会修改实参的指针(比如头结点为空的时候插入节点,这是就修改了头结点),那么就必须将相应的形参说明为指针的指针,函数电泳时将实参指针的地址传递给相应的形参。
creat函数里的L是局部变量,你malloc后,它重新指向新的地址,故让它变成二级指针。这样你就可以对La(main里的)操作了。
我感觉没有必要用二级指针,我们的目的主要是为了让主函数中的指针的地址指向一个空内存。我们完全可以通过传递这个指针的地址到子函数中,然后给这个指针的地址分配内存就可以了。例如下面这个程序就是正确的。
如果只是为了释放链表内存,只要一级指针就可以了,用二级指针只会增加代码的复杂程度,降低可读性。二级指针的作用就在于,在这个函数内,你可以修改这个函数的主调函数(比如main函数)中链表头结点的指针值。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流