資料結構 帶頭結點的鍊錶操作

2021-09-25 17:09:36 字數 1457 閱讀 9190

最近在學習資料結構,對鍊錶的理解也僅僅停留在書本上。現就鍊錶的手寫**記錄如下,新手上路避免不了錯誤的出現,還望批評指正。

帶頭結點的優點

帶頭結點對鍊錶進行以下的處理

帶頭結點與不帶頭結點的操作相類似,只是在考慮是否為空表上的處理略有差異

1-插入

//頭插法

public void headadd(string str)

//尾插法

public void endadd(string str)

lnode p=head.next;

while(p.next!=null)

lnode temp=new lnode();

temp.data=str;

p.next=temp;

}

頭插法不需要判定是否為空,尾插法需要判定是否為空。同時尾插法需要遍歷。

//將str1插入到結點(結點的`data` 為str)之前。

public void add(string str1,string str)

if(q == head.next)

else if(q != null)else

}

其實中間插入與尾插法有類似的地方,就是都需要遍歷。

2-刪除

刪除鍊錶中的某個資料,也需要遍歷操作。

//方法一  刪除操作

public void delete(string str)

if(q == head.next)

else if(q != null)else

方法一是遞迴的遍歷操作。假設鍊錶為a->b->c->d->e,我們要刪除c,那麼必須要找到b才能夠進行刪除。如果刪除所有c,那麼就需要從頭開始遞迴操作。工作量大,**也不好寫。那麼如何縮短工作量,並且減少**呢?

//方法二     刪除鍊錶中所有為str的結點

public void delete(string str)

else

p=p.next;

} }

假設鍊錶為a->b->c->d->e,如果我們要刪除 c,我們可以先遍歷到c,然後將c的下乙個結點(d)的值賦給b,然後在用指標指向e。此方法一次遍歷即可刪除所有c。

public void clear()

}

鍊錶的清除可以用頭結點的指標的的指向來進行刪除操作。

3-反轉

public void reverse()		

}

帶頭結點的鍊錶反轉,將乙個指標指向頭結點的後乙個結點,並將頭結點指向空。後面就是乙個頭插法的插入操作。

總結無論是帶頭結點還是不帶頭結點,所考慮的核心問題都差不多。

帶頭結點的單鏈表操作注意一下幾個要點。

資料結構 帶頭結點鍊錶和不帶頭結點鍊錶操作比較

帶頭結點的鍊錶和不帶頭結點的鍊錶主要不同點在插入和刪除操作上。同時要注意,帶頭結點的鍊錶初始化操作時建立頭結點。下面我們來看一下 中的異同 include include includetypedef int elemtype typedef struct nodenode int insertla...

資料結構 帶頭結點的雙向鍊錶操作 C實現

typedef struct dulnode dulnode,dulinklist 鍊錶初始化 void initdulinklist dulinklist plist plist prior plist next null 為了實現以下插入,刪除等一系列操作,先封裝以下功能 int getleng...

資料結構 帶頭結點的鏈式表操作集

6 10 帶頭結點的鏈式表操作集 20 分 本題要求實現帶頭結點的鏈式表操作集。list makeempty position find list l,elementtype x bool insert list l,elementtype x,position p bool delete list...