トップページ⇒tech
5コメント3KB

アルゴリズムサンプルコード補完スレッド

■ このスレッドは過去ログ倉庫に格納されています
0001今時の14才 NGNG
アルゴリズムに関する本は

C言語による最新アルゴリズム事典
http://www.matsusaka-u.ac.jp/~okumura/algo/

Cプログラマのためのアルゴリズムとデータ構造
http://www.context.co.jp/~cond/books/algo/

など色々ありますが、
* サンプルコードが断片的
* サンプルコード自体がない
などの問題で不愉快な思いをしたことはありませんか?
そういうサンプルコード不足を補うスレッドです。
0002今時の14才 NGNG
まずは、双方向リストです。

#include <stdio.h>
#include <stdlib.h>

typedef struct _LinkedList
{
struct _LinkedList *next;
struct _LinkedList *prev;

int value;
} LinkedList;

LinkedList linklist_root;
LinkedList *linklist_cur = NULL;


void
ll_init( void )
{
linklist_root.next = linklist_root.prev = &linklist_root;
linklist_cur = &linklist_root;
}

void
ll_destory( void )
{
LinkedList *p = linklist_root.next;
LinkedList *next = NULL;

while ( p != &linklist_root )
{
next = p->next;
free( p );
p = next;
}
}

void
ll_add( int value )
{
LinkedList *m = malloc( sizeof( LinkedList ) );

m->value = value;

m->prev = linklist_cur;
m->next = linklist_cur->next;
linklist_cur->next->prev = m;
linklist_cur->next = m;

linklist_cur = m;
}

int
ll_remove( LinkedList *rm )
{
if ( rm == &linklist_root )
{
return 0;
}

rm->prev->next = rm->next;
rm->next->prev = rm->prev;
return 1;
}

void
ll_remove_by_num( int rmv )
{
LinkedList *p = linklist_root.next;

while ( p != &linklist_root )
{
if ( p->value == rmv )
{
ll_remove( p );
}

p = p->next;
}

}

typedef void ( *LinkedList_LoopFunc )( LinkedList *p );

void
ll_loop( LinkedList_LoopFunc f )
{
LinkedList *p = linklist_root.next;

while ( p != &linklist_root )
{
f( p );
p = p->next;
}

}

void
put_value( LinkedList *p )
{
printf( "%d\n"@` p->value );
}

int
main()
{
ll_init();
ll_add( 1 );
ll_add( 1 );
ll_add( 3 );
ll_add( 4 );
ll_add( 1 );


ll_loop( put_value );

ll_remove_by_num( 1 );

puts( "-----" );
ll_loop( put_value );

ll_destory();

return 0;
}
000320才 NGNG
アルゴリズムコレクション。宿題にどうぞ(藁
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/
0004名無しさん@お腹いっぱい。 NGNG
いいね.ありがとう
0005ココわ? NGNG
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/
■ このスレッドは過去ログ倉庫に格納されています