刪除雙向連結串列節點小小問題

2025-03-11 12:25:03 字數 3253 閱讀 5657

1樓:網友

首先你要搞清楚free和delete的區別。

new和delete是一對,c++中使用。

malloc和free是一對,c和c++中都可以使用。

所以不能代替。

其次即使可以代替,free也只是有釋放記憶體的功能,不能把指標賦為null。

所以答案是:不能代替,結果不一樣,釋放區別如下:

malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

對於橡磨世非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行解構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和解構函式的任務強加於malloc/free。

因此c++語言需遊稿要乙個能完成動態記憶體分配和初始化梁肢工作的運算子new,以及乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。

2樓:網友

free函式不可與new混用滴。具體看資料。

雙向連結串列刪除節點問題

3樓:皇昶

你這樣是刪除了p前面的節點,應該是。

q = p->before;

q->next = p->next;

p->next->before = q; //假設p後面的節點不是null,至此p節點從連結串列中刪除。

free(p); //釋放p節點記憶體。

p = q->next; //如果希望繼續利用p向後遍歷,可以這樣做。

雙向迴圈連結串列刪除節點的問題,哪位大俠幫幫忙啊~

4樓:網友

//帶頭結點的迴圈連結串列,即頭結點中無資料。

void del_node( node *p , int data)else

p1=p1->next ;

while ( p1 != p->next );

資料結構雙向連結串列如何刪除結點?

5樓:網友

只學過c語言,嘗試c語言寫一下。

讓x節點的前置節點的向後指標域指向x節點的向後指標域指向的節點;

讓x節點的後續節點的向前指標域指向x節點的向前指標域指向的節點;

釋放x節點;

p->llink->rlink= p->rlink;

p->rlink->llink= p->llink;

free(x);

當然,如果雙向連結串列不是迴圈連結串列,帶頭指標這些,還需要考慮x節點作為第乙個節點或者最後乙個節點的特殊情況。

請教資料結構的一道題! 刪除雙向連結串列中間某個節點,需要修改個()指標域? a1 b2 c3 d

6樓:博學小趙是吃貨

刪除雙向連結串列中間某個節點,需要修改2個指標域。雙向連結串列具備兩個方向的指向,無非就是每個結點成了兩個指標。有兩個指標域分別指向前乙個結點和後乙個結點,還有一部分用來儲存結點資料,初始化結點時需要將兩個指標都指向空。

增加結點時,需要將最後乙個結點的next指標指向新結點,然後將新結點的prev指向最後乙個結點。

刪除結點時需要將待刪除結點的前乙個結點的next指向待刪除結點的後乙個結點,然後,把後者的prev指標指向前者。

插入結點就是將新結點的前乙個結點的next指標指向指向新結點,然後把新結點的next指標指向前乙個結點原來後面的那個結點,然後把後面的結點的prev指標指向新結點,把新結點的prev指標指向前乙個結點。

7樓:網友

b 2個,是雙向的,要修改一結點的前驅,另一結點的後繼即可啊。

【求】【急】雙向連結串列的刪除操作一定要有尾節點麼?

8樓:網友

你標題如此問,我覺得你應該已經看出問題所在了啊最後乙個節點的next和prior都指向自己,所以p->prior->next = p->next;

p->next->prior = p->prior;

這兩句話,指來指去都還是指向自己。但是僅從這個函式而言,只是刪除了乙個節點,我不知道你對原來的連結串列有沒有任何改動。也就是說,你如何知道你沒有刪除成功的?

你的連結串列必須保留至少乙個指標,而你對那個指標的操作在這個函式中沒有體現。

乙個辦法,你已經說了,設定乙個不存放資料的頭結點(或者你稱之為尾節點)有這個節點佔用了空間,都是簡化了連結串列操作的邏輯,可以說好處大大多於壞處。

但是,它並不是必須的。你依然可以通過檢查乙個節點是否指向自己,來判斷它是否是連結串列中唯一的元素,從而做特殊處理。

關於c語言中的雙向連結串列中的刪除和插入問題

9樓:網友

我想問的是p->rlink指的是p右邊的結點嗎還是p所指向的結點的右指標域?

p->rlink的內容,是 p的右邊節點的位址;

p->llink->rlink指的是p左邊結點的右指標域嗎還是p左邊結點的後繼結點(可後繼結點不是p嗎,這句賦值語句是什麼意思呢?)?

p的左節點的rlink的值,當前是 p的位址,這句**是 將rlink的值修改為 p->rlink,即 p的右節點;

其中p->llink->rlink->llink=p->llink這句是什麼意思呢?我的理解是:把p所指向的結點的。

前驅結點的位址賦給(p所指向的結點的前驅結點的後驅結點(這個後驅結點是p嗎?)的左指標域),對嗎?

p的右節點的llink內容的值填充喂 p的左邊節點。

看下面圖是否更清晰:

10樓:網友

>rlink指的是,p指標指向的結點的右指標域的內容,就是p結點(指標p指向的結點)右邊的結點的位址。

llink->rlink=p->rlink;

p->rlink是指p指向的結點的右指標指向的結點的位址,賦給p的左指標指向結點的右指標,形象來說,也就是將p右邊的結點接到p的左邊結點的右指標上、

llink->rlink->llink=p->llink;應該寫錯了,p->llink->rlink->llink就是p->llink,將p->llink的內容賦給p->llink,沒什麼意思。

雙向連結串列刪除節點時修改指標的順序能否更改

11樓:網友

可以的,這兩句話沒有先後之分,原因是這樣單獨修改某個指標後並不會造成訪問其他結點的指標斷鏈。

C 雙向連結串列問題,C 模板雙向連結串列問題

3全部 include using namespace std template class doublelist node prev null next null int thesize node head node tail public doublelist doublelist thesiz...

學習日語小小問題,學習日語一個小小問題

其實這個跟環境有關的 漢語是我們的母語,雖然剛開始都是從頭開始接觸,但是周圍都是說著一樣語言的人,時間常了,每天聽每天聽,自然而然的就會記到腦子裡,自然而然的就掌握了。就像從小就移民去國外的華人,說起中文來也有很多說的不地道發音不準確的地方啊 想要外語說的流利單詞記得牢,我想還是多聽多說吧。多和周圍...

化學小小問題ing

1 解 金屬和氫氣之間有這樣的關係 金屬 h2 相對分子質量 x 2 實際質量 6 0.2 可解得 x 60 abcd四個選項中,沒有分子量是60的,因此,這個組合必須是一個分子量大於60,一個分子量小於60。因此選擇a。2 過濾操作用於分離不溶性固體和液體的。而此題中說的是飽和溶液,說明固體溶於該...