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