資料結構基礎之單鏈表
對單鏈表的建立,插入,刪除,逆序,列印元素做乙個小小的總結,不過我不覺得這些東西在具體的工作後到底能發揮什麼作用,因為強大的stl已經把這些都做好了,我們只需要明白在什麼場合使用哪乙個stl就可以了。鍊錶有乙個資料域,有乙個指標域,它的操作其實就是對指標域的操作,無非是指來指去而已。也許這些能反映出乙個人的思維敏捷度,以及紮實的程式設計基礎吧。
但是我想說的是這些玩意在你頭腦比較清楚的時候寫這個很簡單,但是當你煩躁的時候,不好寫吧,除非你經常寫這個。單鏈表看著簡單,但是不見得能寫的正確。
該**經過驗證,測試正確,但是**中不免有錯誤之處,或者哪些部分寫的不好,希望高手能指出來,不勝感激。因為**必須經過驗證,那些沒有經過驗證的**是不負責任的**。在**中我加了詳細的注釋。
[cpp]view plain
copy
#include
#include
#include
using
namespace
std;
typedef
struct
node_stru
node;
//建立單鏈表
node *create()
else
} head = head->next;//由於頭結點沒有資料,使頭結點指向下乙個節點,即指向第乙個真正的節點
p->next = null;//資料插入完成後,當前節點也跑到了最後,使它的下乙個節點置為null,表示節點完成
return
head;
} //單鏈表測長,這個很簡單,只需判斷當前節點(初始化當前節點為頭結點)是不是為空,如果不為空指向下乙個節點,並計數就可以了
intlength(node *head)
return
length;
} //列印單鏈表,這個也很簡單,在當前節點(初始化當前節點為頭結點)不為空時候,列印出來,並使得當前節點指向下乙個節點即可
void
print(node *head)
} //刪除節點,這裡的刪除節點是根據節點資料進行刪除的,不是從第乙個節點進行刪除,也不是從最後乙個節點進行刪除
//p->next = p->next->next
node *del(node *head, int
num)
if(num == p1->data)
//如果當前節點資料域與要刪除的資料相等
else
//如果當前節點為中間節點,使當前節點指向下乙個節點,注意:這裡不能使用p1->next=p1->next->next,使用之前儲存的節點
p2->next = p1->next;
} else
cout <
<
return
head;
} //插入節點,在這裡只在鍊錶的結尾進行插入
node *insert(node *head, int
num)
p1->next = p0;
p0->next = null;
return
head;
} //進行排序,其實就是簡單的氣泡排序,時間複雜度為o(n2),空間複雜度為o(1),穩定
node *sort(node *head)
p = p->next;
} }
return
head;
} //鍊錶逆序
node *reverse(node *head)
for(int
j=0; j//暫時用於測試
cout <
<
"\n"
; node *newhead, *link, *s;
newhead = (node *)malloc(sizeof
(node));
link = newhead;
for(
intk=length-1; k>=0; k--)
newhead = newhead->next;
link->next = null;
return
newhead;
} //求單鏈表的中間節點
void
searchmid(node* head)
mid = tmp2;
cout <
} int
main(
intargc,
char
*argv)
執行結果:
資料結構基礎之單鏈表
資料結構基礎之單鏈表 對單鏈表的建立,插入,刪除,逆序,列印元素做乙個小小的總結,不過我不覺得這些東西在具體的工作後到底能發揮什麼作用,因為強大的stl已經把這些都做好了,我們只需要明白在什麼場合使用哪乙個stl就可以了。鍊錶有乙個資料域,有乙個指標域,它的操作其實就是對指標域的操作,無非是指來指去...
基礎資料結構之單鏈表倒置
1.遞迴方法 簡單來說就是除了空鍊錶和乙個結點的鍊錶之外,當結點的下一跳不為空時就繼續讓下一跳執行倒置。當結點下一跳 為空時,返回該結點給倒數第二個結點,倒數第二個結點將最後一次遞迴返回的最後乙個結點的指標指向自己,然後自己的指標置空,然後返回。依此類推。描述起來有點麻煩,比較簡介,如下 list ...
資料結構 單鏈表 基礎
在實現單鏈表的基本功能後 單鏈表的幾個基本問題 1.比較順序表和煉表的優缺點,說說它們分別在什麼場景下使用?順序表 物理位置相鄰 優點 在一段記憶體中用陣列連續存放,所以方便隨機查詢元素。缺點 動態開闢,容易造成記憶體浪費,需要乙個元素,開闢過多。前面新增元素時,要逐個挪動後面的每個元素,較麻煩。場...