博主不定期更新【保研/推免、c/c++、5g移動通訊、linux、生活隨筆】系列文章,喜歡的朋友【點讚+關注】支援一下吧!
2. 鍊錶
#ifndef _array_h_
#define _array_h_
typedef
struct
array;
array array_create
(int init_size)
;void
array_free
(array *a)
;int
array_size
(const array *a)
;int
*array_at
(array *a,
int index)
;void
array_inflate
(array *a,
int more_size)
;#endif
the inte***ce
array array_create
(int init_size)
void
array_free
(array *a)
//封裝
intarray_size
(const array *a)
int*
array_at
(array *a,
int index)
return
&(a->array[index]);
}
void
array_inflate
(array *a,
int more_size)
//此迴圈可替換為標準庫函式:memcpy,提高效率
free
(a->array)
; a->array = p;
a->size +
= more_size;
}
#include
"array.h"
#include
#include
const block_size =20;
intmain()
array_free
(&a)
;return0;
}
#ifndef _node_h_
#define _node_h_
typedef
struct _node node;
#endif
例項:讀入一些數(不知道有多少個)並記錄下來,讀到-1為止。
#include
"node.h"
#include
#include
typedef
struct _list list;
void
add(list* plist,
int number)
;void
print
(list *plist)
;int
main()
}while
(number !=-1
);print
(&list)
;//遍歷輸出
/*****鍊錶的搜尋*****/
scanf
("%d"
,&number)
; node *p;
int isfound =0;
for( p=list.head; p; p=p->next)}if
(!isfound )
return0;
}void
add(list* plist,
int number)
//將表鏈結起來
last->next = p;
}else
}void
print
(list *plist)
printf
("\n");
}
鍊錶的遍歷:
void
print
(list *plist)
printf
("\n");
}
鍊錶的搜尋:
scanf
("%d"
,&number)
;node *p;
int isfound =0;
for( p=list.head; p; p=p->next)}if
(!isfound )
node *q;
for( q=
null
, p=list.head; p; q=p, p=p->next)
else
free
(p);
break;}
}
使用指標
時如何尋找邊界條件?
當指標出現在->next
左邊時,需要判斷該指標是不是null,以保證安全
for
( p=head; p; p=q)
7 回文鍊錶
使用快慢指標,當快指標到達表尾的時候,慢指標在鍊錶中部,將鍊錶的後半部分進行倒置,與前半部分進行比較,相等則為回文鍊錶。鍊錶的倒置部分 例如1 2 3 4 3 2 1 相當於是pre 前節點 slow 當前節點 next 下個節點 三個指標在鍊錶上滑動,開始的時候,slow指向4這個節點,pre 開...
中級演算法 7 奇偶鍊錶
題目 給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 nu...
鍊錶 環形鍊錶
環形鍊錶也叫迴圈鍊錶 可以是雙鏈表 也可以是單鏈表 操作原理和單鏈表差不多,只是最後乙個節點不在指向空 null 而是頭 head 這裡以單鏈表舉例 description 環形鍊錶 author lzq date 2018 11 3 20 46 version 1.0 public class a...