小牛成長記 鍊錶學習

2022-05-03 08:00:11 字數 3276 閱讀 1741

寒假已經過去了嗎?       哎,

寒假刷了一下資料結構,由於時間問題,刷的比較快,說實話有很多知識點都沒掌握,就像是上英語課一樣,老師教你一遍單詞,你只能說你知道這個單詞了,卻不能說你會了。我就是這樣的

首先說一下需掌握的鍊錶知識點:1.結點的概念。

2.單鏈表的建立:包括正序建表和逆序建表。

3. 單鏈表結點的查詢,插入,刪除。

4. 單鏈表的逆置,歸併, 拆分。

今天我又看了一下鍊錶(因為當時沒刷完題,有些題還不能太熟練地敲出,這樣是不可以的),我們的課本也不知道怎麼了,剛介紹完幾種記憶體分配方式,當然重點是動態記憶體分配,然後直接開講單鏈表節點的基本操作,比如單鏈表結點的查詢,插入,刪除。 。。。我想說的是我當時只是對單鏈表的基本組成單元--節點有了初步認識,對單鏈表都沒有個整體概念,這可讓我怎麼學啊。所以第一次直接跪了。看的我雨裡霧裡的,好在一不小心往後翻書的時候看到了單鏈表的建立,頓時淚奔

,然後就把單鏈表的頭插法和尾插法給收了,為我所用,我此時又多了一項技能。真不好意思

。  然後再返回來繼續攻克單聊表的應用,時間不等人啊,此時已經過去了一上午和一下午,晚上還有任務--刷題,不過不怕,因為我覺得刷10道題,不如把乙個知識點完全掌握,頓時我又來了激情。繼續奮戰。既然說到這了,我想你可能總結了一下學習單鏈表的順序吧,哈哈,看來我猜對了。  首先對結點要了解,然後從基本組成單元到整體,也就是從結點到單鏈表,現在可能你非常好奇如何建立單鏈表吧,那就學習如何建立單鏈表吧。

建立單鏈表有兩種方法:1.逆序建立單鏈表(頭插法); 2.順序建立單鏈表(尾插法); 

首先先講一下順序建表:1.首先建立乙個頭結點(不理解可以google一下)。2.然後就是開始建表了,現貼**講一下:

**(順序建立鍊錶):

struct node *head, *tail, *p;//定義結構體型別的指標變數head,tail,p,其中tail充當游動指標

head = (struct node*)malloc(sizeof(struct node));//建立空節點,不放資料,只存放第乙個節點的位址

head->next = null;//指空

tail = head;//頭指標和尾指標開始時都指向head

for(i=1; i<=n; ++i)//假設要建立n個節點,所以迴圈n次

再講一下逆序建立鍊錶:步驟和順序建表差不多,只須改下核心**即可:

**:

struct node *head,  *p;//定義結構體型別的指標變數head,p,其中p充當游動指標

head = (struct node*)malloc(sizeof(struct node));//建立空節點,不放資料,只存放第乙個節點的位址

head->next = null;//使頭結點指空

for(i=1; i<=n; ++i)//假設要建立n個節點,所以迴圈n次

建立完後,你又想了,我建單鏈表到底有什麼用啊,這時你碰巧發現了單鏈表的應用。

你此時是不是忽然想起了陣列,。。。對。。。,我記得在陣列中可以查詢,刪除,或插入某個值,那麼在鍊錶中可不可以呢?

答案是肯定的,而且比用陣列更簡潔。

1.查詢

首先來看一下如何在鍊錶中查詢某個值是否存在吧,核心**:

struct node 

;struct node *search(struct node *head, int key)

return null;//迴圈正常結束,說明不存在該節點

}

查詢是不是很簡單啊,就像在陣列中查詢某元素是否存在一樣。在陣列中是借助下標來遍歷整個陣列,而在單鏈表中是借組指標(next 指標)來遍歷。現在你應該掌握了單鏈表的查詢吧,不要著急,接下來你就要學習單鏈表的插入了,在講之前,首先回憶一下,怎麼往陣列中插入乙個元素呢?

,其實往陣列中也是可以插入某個元素的,但是比較麻煩,有興趣的同學可以自己寫一下,那麼有沒有更簡單的方法呢?

當然有了,那就是用鍊錶代替陣列,往單鏈表中插入元素就會很簡單了。接下了就講講如何往單鏈表中插入元素。

2.插入

思路:假如現在需往1, 2兩個結點中插入3結點,那麼只需把第一結點中存放的位址賦給3,然後再把第三個結點的位址賦給第乙個結點即可。

是不是很簡單啊

核心**:

void insert(struct node *head, int key)

q->data = key;//在p結點後插入q結點

q->next = null;

q->next = p->next;

p->next = q;

}

現在你已經知道了如何往單鏈表中查詢結點,如何插入結點,還有就是如何刪除某個結點呢?

3.刪除

思路:假如現在需在1, 3兩個結點中刪除2結點,那麼只需把第3個結點的位址賦給1,然後再把第2個結點的釋放(free())即可。

核心**:

//此函式為刪除帶頭結點的單鏈表中第乙個值為key的結點的函式

int del(struct node *head, int key)

else

p = p->next;

}if(flag==1)

else

return 0;

}

以上就是對單鏈表的基礎操作,現在是不是很高興啊,你已經掌握了單鏈表的基礎知識了,接下來你會發現,這些基本操作是多麼的重要;

接下來就應該更上一層了.

,你做好準備了嗎?

由於課程太緊,所以只能分幾次寫了

。。。。。。。。。。。。。。。。。。。。未完未完未未完。。。。。。。。。。。。

學習HTML成長記 5

用於在網頁中嵌入,該標籤不需要結束標籤,可單獨使用。hr,br 也一樣不需要結束標籤。標籤有兩個常用屬性 src屬性和alt屬性。src source 用於指明影象的儲存路徑,通常是url形式。alt alternative 用於無法找到影象時顯示替代文字,該屬性可省略不寫。基本格式其中 影象檔案 ...

web前端學習成長記 PHP基礎學習00

00.網頁開發技術 html 網頁內容結構 css 網頁外觀樣式 js 程式語言 可以用於呼叫瀏覽器提供的api wep apis 網頁互動 介面功能 jquery 便捷手段 搭建web伺服器 提供 伺服器的機器 http 瀏覽器與服務端的通訊協議 服務端開發 動態網頁技術 資料庫操作 服務端儲存資...

鍊錶學習 靜態鍊錶

struct linknode 鍊錶在指定位置插入與刪除元素不需要移動元素,只需要修改指標即可,而陣列刪除與加入元素則需要移動後面的元素,鍊錶相對於陣列來講,則多了指標域空間開銷,拿到鍊錶第乙個節點就相當於拿到整個鍊錶 鍊錶的分類 靜態鍊錶,動態鍊錶 單向鍊錶,雙向鍊錶,迴圈鍊錶,單向迴圈鍊錶,雙向...