Dokusyo-nissi Bessitu

<< 2005/07 >>
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

[Debian Memo] (for Woody)
[sekiyo HPへ]

[はじめてのC] C言語のページ (1)
[その 2] (2)
[その 3] ABC of C
[その 4] CPP World Tutorial (1) (by Prelude) linkrot
[その 5] The Standard C Library (Null)
[その 6] CPP World Tutorial (2) linkrot
[その 7] (3)
[その 8] (4)
[その 9] 作ってわかる Cプログラミング (1)
[その 10] (2)
[その 11] Arrays and Pointers in C
[その 12] Learning GNU C (1)
[その 13] (2)
[その 14] (3)
[その 15] (4)
[その 16] アドレスブック
[K & R 2nd] The C Programming Language (1)
[その 2] (2)
[その 3] (3)
[その 4] (4)
[その 5] (5)
[その 6] (6)

[my bookcase]

(サーチエンジンから 来られた方で 該当する
キーワードが 見つからないときには、上の
はてな検索窓から 再度検索してください ←
[日記] のほうを クリック)

 | 

2005-07-12 φ(-_-)

f:id:sekiyo:20050713063313:image:w100

[]はじめての C

リンクリスト 10

リンクリストで 用いる テクニックには、おもしろくって 役にたつものが、いくつか あります。

1. 一致する 項目を 捜して その数を かぞえる ▽

int count(List list, int find)
{
int cnt = 0;
while (list != NULL) {
if (list->data == find)
cnt++;
list = list->next;
}
return cnt;
}

2. リストの N番目の 項目を 見つけだす ▽

Element get_nth(List list, int index)
{
int i;
for (i = 0; i < index; i++) {
list = list->next;
if (list == NULL)
return NULL;
}
return list;
}

3. 全リストの 抹消

これは トリッキーな 仕組みで、次の項目に 移動してからでないと、その項目を free できません。

多くの人は 次の やり方で うまくいく、と まちがって 信じています。

void destroy(List list)
{
while (list != NULL) {
free(list);
list = list->next;
}
}

正しい 方法では、ポインタの 保存を 用いることで、開放された メモリに アクセスできなくするのです ▽

void destroy(List list)
{
Element save;
while (list != NULL) {
save = list->next;
free(list);
list = save;
}
}

4. ダブってる (項目を) 削除する ▽

void unique(List list)
{
Element curr = list;
Element save;
/* Empty list */
if (curr == NULL)
return;
while (curr->next != NULL) {
if (curr->data == curr->next->data) {
save = curr->next->next;
free(curr->next);
curr->next = save;
}
else
curr = curr->next;
}
}

 | 

[シラノの新聞]

[枇杷と柿]

[馬葉礼 談話]

[My Links]

[Network Archives]


[かうんた→ 526085]