不記得是大一還是大二開的《資料結構》,當時可真是可愛,按照我當時的想法就是這東西有什麼用,目光短淺的我。。。學什麼都是學這個有什麼用啊?典型的一枚功利分子。
後來讀了一些讀物,了解到 資料結構 就是如何表示 資料 的一種形式,計算機什麼是計算,計算就是機械式的資訊處理,資訊是什麼,資訊就是數字,一列列的 binary number。
但是在處理資訊時,考慮到了 效率,人就是懶,不懶不進步。把資訊以一種什麼樣的形式交給計算機,就可以立馬得出 result。這就用到了 資料結構 + 演算法,雖然演算法還沒看。。。
在geeksforgeeks學ds,我也真的是有意思。
linked list 單鏈表,優點和缺點也已經寫過了。
1 #include2 #include34//linked list from fengsf
5struct
node6;
10void printlist(struct node *n)
111718}
19//
在頭結點之前插入新節點
20void push(struct node ** head_ref, int
new_data)
2128
//鍊錶中間插入新節點
29void afteradd(struct node * prev_node, int
new_data)
3036
37struct node * new_node = (struct node *) malloc (sizeof(struct
node));
38 new_node->data =new_data;
39 new_node->next = prev_node->next;
40 prev_node->next =new_node;41}
42//
在尾節點之後插入新節點
43void endadd(struct node ** head_ref, int
new_data)
4455
56while(null != last->next)
5760
61 last->next =new_node;62}
63//
移除結點通過data
64void deleteelementbykey(struct node ** head_ref, int
key)
6574
75while(null != temp && temp->data !=key)
7680
if(null ==temp)
8185 pre->next = temp->next;
86free
(temp);87}
88//
移除結點通過位置
89void deleteelementbyposition(struct node ** head_ref, int
position)
9099 temp = (*head_ref);
100if(null != temp && 1 ==position)
101106
int times = 0
;107
while(null != temp && (position-1) !=times)
108113
if(null ==temp)
114118 pre->next = temp->next;
119free
(temp);
120}
121//
銷毀鍊錶
122void destroylinkedlist(struct node **head_ref)
123132
133 (*head_ref) =null;
134}
135//
鍊錶的長度
136int linkedlistlength(struct node *head_ref)
137145
146return
length;
147}
148//
搜尋元素值是否存在於鍊錶中
149int searchelement(struct node * head_ref, int
key)
150157
if(null ==head_ref)
158162
163 judge = 1
;164
return
judge;
165}
166//
通過結點的位置獲取結點
167struct node * getnodebyposition(struct node * head_ref, int
position)
168175
if(position <= 0 && position >length)
176180
int times = 0
;181
while(null != head_ref && times != position-1
)182
186return
head_ref;
187}
188//
獲取倒數的元素
189struct node * getnodebypositionfromlast(struct node * head_ref, int
position)
190197
if(-1 ==boolposition(head_ref, position))
198201
202for(int i = 0; i < length-position; i++)
203206
return
head_ref;
207}
208//
判斷所求位置是否正確
209int boolposition(struct node * head_ref, int
position)
210217
218return1;
219}
220//
返回中間的元素
221int findmiddleelement(struct node *head_ref)
222230
int findmiddleelement_2(struct node *head_ref)
231240
while(null != fast_ptr && null != fast_ptr->next)
241245
246return slow_ptr->data;
247}
248int findmiddleelement_3(struct node *head_ref)
249259
260 counter++;
261 head_ref = head_ref->next;
262}
263264
return mid->data;
265}
266//
不用遞迴返回元素個數
267int countwhithoutrecursion(struct node * head_ref, int
key)
268277
for(int i = 0; (i < length && head_ref != null); i++)
278284
else
285288
}289
290return
counter;
291}
292/*
void sortlist(struct node ** head_ref)
293302
else
303310
temp = (*head_ref);
311312
while(temp != null)
313319
else
320326
}327
}328}*/
329//
判斷是否為迴圈鍊錶
330int iscircular(struct node *head_ref)
331336
337struct node * temp = head_ref->next;
338339
while(temp != null && temp !=head_ref)
340343
344return (temp == head_ref) ? 1 : -1
;345
}346
static
int counter = 0
;347
//通過遞迴返回節點個數
348int countwithrecursion(struct node * head_ref, int
key)
349354
if(key ==head_ref)
355358 countwhithoutrecursion(head_ref->next, key);
359}
360//
判斷是否為空鍊錶
361int headisnull(struct node *head_ref)
362365
int main(void
)366
414else
415418
return0;
419 }
受益良多
資料結構 單鏈表 Linked List
include include define list init size 10 define listincrement 100 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define o...
單鏈表(合併單鏈表)
單鏈表遍歷 單鏈表遍歷是從單鏈表頭指標head開始訪問,沿著next指標所指示的方向依次訪問每乙個結點,且每個結點只能訪問依次,直到最後乙個結點為止。遍歷時注意,不要改變head指標的指向。因此一般設定另外的乙個指標變數如p,p從head開始依次訪問乙個結點,直到鍊錶結束,此時p null,完成依次...
單鏈表之排序單鏈表
package list public class sortedsinglylist extends singlylist 將values陣列中的所有物件按值大小插入 public sortedsinglylist t values 過載深拷貝,由單鏈表構建排序單鏈表 public sortedsi...