當前位置:首頁 » 編程語言 » c語言刪除節點後數據還存在
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言刪除節點後數據還存在

發布時間: 2022-09-23 01:55:46

1. c語言刪除鏈表節點出現問題

看不到你的代碼,不知道發生了什麼。我估計是破壞了鏈表的next指針,導致死循環了吧。

2. C語言的單向鏈表刪除節點的問題

temp=p;
p=p->next;
temp->next=null;
這三句存在問題,temp=p,讓temp指向p所指向的節點,p=p->next,p指向後移
temp->next=null,讓temp的後繼為空,這里出了問題,鏈表從temp指向的節點斷開,相當於刪除p之後的所有節點。
應該先判斷p是不是最後節點
if(p->next==null)
如果是,只好去找p的前趨pre,讓pre->next=null,free(p)
如果不是最後節點,將p的後繼節點數值域復制給p,然後將p的後繼節點刪除,等同與刪除p
p->data=p->next->data;
p->next=p->next->next;
free(p);

3. 如何用c語言的演算法來刪除數組在內存中的數據,刪除後可以放入新數據,就是此內存空間可以再被利用。

靜態數組的空間要等到當前函數結束,數組的空間才會自動釋放,否則不會釋放,如果你想釋放數組空間,就用指針構造一個動態數組,用free() 去釋放

4. 求問個c語言問題,刪除鏈表節點的時候 為什麼要釋放被刪節點,不釋放也不影響呀

如果不釋放的話會造成內存泄露。

比如一個業務邏輯中需要不斷的增加節點,並不斷的刪除節點,如果不釋放節點的內存空間的話,假設每個節點占內存8位元組,那麼這個塊邏輯執行足夠多次數,內存就放不下了。這就是隱患了。

(尤其處理的數據量級較大時,這個問題會比較明顯)

5. c語言中數組刪除後還存在么變數還能用么

這段代碼並沒有刪除數組(沒有釋放數組佔用的空間),只不過是清除了原先存儲的數值,這樣,原來數組中存儲的元素是被「刪除了」(被-1取代),但是這個數組的空間並沒有刪除,還可以繼續使用這個數組存儲其它數值。請問明白了嗎?

********************************************************
不明白怎麼通過「把數組變數賦值-1」的方法「刪除數組」

如果是靜態數組(聲明時就指明了數組大小),那麼無法改變數組名的值,而且也無法在程序運行期間刪除靜態數組所佔的空間。

如果是動態分配的數組(使用了malloc()等函數分配),那麼要用free()函數也能釋放為其分配的空間,如果只是簡單的「把數組變數賦值-1」,那麼這個數組所佔用的空間依然沒有釋放,裡面存儲的元素依然沒有被更改。

6. C語言 刪除某個節點後,主函數內輸出的動態鏈表不變

照你這個代碼邏輯,當你刪除的是頭結點的時候,確實對原鏈表不會產生影響,如果不是,那我暫時也看不出來,代碼量太大,我也沒法調

7. C語言的單向鏈表刪除節點的問題

偽代碼:
if node.age ==30
delete(node)

delete是封裝好了的代碼

刪除一個節點的步驟:
如我有一個鏈表:A B C D 四個元素
我要刪除B,則有
p =A.next
A.next = p.next
free(p)

主要是思想對就行,一定要封裝

你這個屬於那種在線刪除
就是先查找,如果符合條件,就刪除。
刪除操作,必須知道有刪除的節點的前一個節點的地址才行。
那麼你應該每次查找的時候不是判斷當前節點是否符合要求,而是判斷下一個節點。如果符合就按照刪除節點的刪除來。
刪除操作的三部曲:
第一步:保存刪除節點的地址
第二步:將刪除節點的前一個節點的指針域指向刪除節點的下一個
第三部:free 需要刪除節點

我現在直接在這里寫代碼了

void del(head,age)
{
p = head;
while(p)
{
if( p->next && p->next->age == age )//刪除操作的三步曲
{
q=p->next;
p->next = q ->next;
free(q);
}//end if
p = p->next;
}//end while
}

代碼就是這樣的。很簡單。這段代碼並不能編譯,你加上類型就好了。我強調的是方法。

8. C語言在線等關於鏈表的節點的刪除為什麼刪了之後還是那個節點還會輸出亂碼,菜鳥跪求大佬解釋

把刪除函數改下
int delete(struct student *pStrhead)
{
struct student *ptemplate=pStrhead;
while(pStrhead!=NULL)
{
ptemplate=pStrhead;//這個放在第一個
pStrhead=pStrhead->pStrNext;
free(ptemplate);

}
return 1;
}