亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于數據結構單鏈表頭結點是否可以用指針替換?

關于數據結構單鏈表頭結點是否可以用指針替換?

單鏈表定義時要聲明一個頭結點,但是這個頭結點的data域是不使用的,只用其next域,那么這個頭結點和一個普通指針有何區別?浪費了一個data域的空間?我的想法是直接用一個指針作為頭結點,原先的頭結點作為存儲數據的第一個單元。頭結點定義:LinkList h;這個h所指向的是頭結點,按照書本和老師講的規定是不儲存數據,就用到一個next域,現在,我讓這個data域也起作用,儲存數據,h這個指針本身作為頭結點。當頭結點空時原:h->next=NULL;現:h=NULL;插入數據時,原:p=(LNode*)malloc(sizeof(LNode)); p->data=e;h->next=p;現:p=(LNode*)malloc(sizeof(LNode)); p->data=e;h=p;其他操作以此類推。我想問一下我這個想法有沒有問題,想搞清楚,問了老師也沒怎么說清楚,求解。
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

如果不用空的header節點的話,要修改頭節點,函數需要傳入header的地址而不是header本身(header此處已經是指針,也就是說要傳入指針的指針)。
比如,

LNode *h, *p;


/* 從第一個節點開始刪除 */

void del_front(Node** header) 

{

    ...

}


p=(LNode*)malloc(sizeof(LNode));

p->data=e;

h=p;


del_front(&h);

在上面這個例子中,你刪除了老的頭結點,那么新的頭結點地址也就變了,也就是說h的值也應該跟著變。要改變指針的值,你只傳入指針h給函數的話是不能修改h的值的(這是值傳入),我們需要通過給函數傳入指向指針的指針才能修改h的值,因此這么做就比較麻煩。

如果是將頭結點作為特殊節點的話,我們即使從第一個節點開始刪除,我們只需要傳入頭結點h給刪除的函數,然后這個函數修改h->next就能解決問題了。所以這么做,維護性應該是要好些的。


查看完整回答
反對 回復 2018-10-29
  • 1 回答
  • 0 關注
  • 1177 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號