小小的鍊錶其實並不簡單

2021-09-19 01:38:15 字數 2569 閱讀 2604

上圖就是我們最常用的單向鍊錶及雙選購鍊錶的示意圖。很明顯鍊錶這種資料結構它是通過一種手段將我們的資料串起來,所以在資料在儲存的時候它並不一定要是連續的,我們只需要將當前資料的下乙個資料的位置資訊儲存起來即可,那麼鍊錶就是通過指標來儲存資料的位置資訊的。

#includeusing namespace std;

//用elemtype代替int 好處就是當int改變時,只需要改變乙個int即可

typedef int elemtype;

//鍊錶節點的定義

typedef struct node

node;

//初始化鍊錶,沒有乙個節點的鍊錶,即為空鍊錶。

void linklistinit(node** p)

//鍊錶的銷毀

void destorylinklist(node** p)

}//列印節點值

void printlinklist(node* p)

while (p != null) }

//鍊錶的頭插法

void linklistinsertfront(node** p,int value)

//鍊錶的尾插法

void linklistinsertback(node** p, elemtype value)

//既然要尾插那麼就要找到尾節點

node* cur = *p;

for (; cur->next != null; cur = cur->next);

//此時cur為尾節點

cur->next = node;

node->next = null;

}//鍊錶的中間插入,即插入到某個節點的後面

void linklistinsertmid(elemtype value,node* pos)

//鍊錶的查詢,返回當前節點的位址

node* linklistfind(node* p, elemtype value)

node* cur = p;

for (; cur != null; cur = cur->next) }

return null;

}//頭刪

void linklistdelfront(node** p)

else }

//尾刪

void linklistpopback(node** p)

if ((*p)->next == null)

// 找到倒數第二個結點

// cur->next->next == null 停下來

node *cur = *p;

while (cur->next->next != null)

// 釋放最後乙個結點

free(cur->next);

cur->next = null;

}//中間刪除(某個節點之後刪除)

void linklistdel(node* p)

int main()

else

cout << "請輸入中間插入的節點值:";

elemtype value3;

cin >> value3;

cout << "請輸入您想要插入的位置節點的值:";

elemtype value4;

cin >> value4;

node* pp = linklistfind(node, value4);

linklistinsertmid(value3,pp);//中間插入

printlinklist(node);

cout << "請輸入您要刪除節點的值:";

int value5;

cin >> value5;

node* ppp = linklistfind(node, value5);

cout << "刪除" << value5 << "節點";

linklistdel(ppp);

printlinklist(node);

cout << "刪除頭節點" << endl;

linklistdelfront(&node);

printlinklist(node);

cout << "刪除尾節點" << endl;

linklistpopback(&node);

printlinklist(node);

system("pause");

return 0;

}

自我感覺啊,面對鍊錶的相關問題時還是得畫圖,有了圖,我們的思路才會更加清晰,對於鍊錶而言,它沒有隨機訪問能力,如果要查詢某個數,只能遍歷一遍,時間相對而言沒有順序表好,但是鍊錶的增刪很快,不需要像順序表一樣挪動資料。

注注注:重要的事說三遍,其實看起來小小的鍊錶沒有多難操作,但就是通過這小小鍊錶引申了很多問題,有許多問題值得我們去思考,當你真正理解了鍊錶之後,你會發現鍊錶真的還挺有意思的。後續我會繼續與大家分享我遇到的關於鍊錶的一些有意思的問題,我們可以與鍊錶進一步的增進感情嘛!

最簡單的php trim函式並不簡單

字串的處理在任何程式中應該是最最常見的了吧。php 的trim函式就是用來去除字串的字串。最常用的就是去除空格了。但是,這個簡單的函式,是否真的像你認為的那樣簡單呢?trim函式的定義如下 trim string str string character mask t n r 0 x0b strin...

CSS並不簡單 z index引發的思考

今天話題是由z index的偶然失效,引發的一系列問題。一 序 從定義上看z index真的是個很簡單的屬性,就是描述元素的層疊順序,但是有時間我們會發現z index並不會起作用。這時候我們就需要好好的理解一下z index背後的問題。二 拋開position和z index 我們多知道posit...

設計模式 並不簡單的工廠模式

一般情況下,工廠模式分為三種更加細分的型別 簡單工廠 工廠方法和抽象工廠。實際上,這三種我們最常用得是第一種簡單工廠和工廠方法模式。而抽象工廠的原理稍微複雜點,在實際的專案中相對也不常用。所以,我們今天主要講解的重點是前兩種工廠模式。建立抽象產品類,定義具體產品得公共介面 abstract clas...