単連結リストの整列 #61 とか言いつつ

とりあえず整数値を持つ要素のリストのインタフェイスを宣言しておく。

intlist.h
#ifndef INTLIST_H_INCLUDED
#define INTLIST_H_INCLUDED

typedef struct tag_intlist *intlist_t;
typedef const struct tag_intlist *cintlist_t;
typedef struct tag_intelem *intelem_t;
typedef const struct tag_intelem *cintelem_t;
typedef struct tag_intiter *intiter_t;
typedef const struct tag_intiter *cintiter_t;

intlist_t intlist_new(void);
void intlist_dispose(intlist_t list);
int intlist_add_first(intlist_t list, int val);
intiter_t intlist_iterator(cintlist_t list);
void intlist_sort(intlist_t list, int (*issup)(cintelem_t, cintelem_t, void *), void *arg);
void intlist_reset_counts(intlist_t list);
unsigned long intlist_get_compare_counts(cintlist_t list);
unsigned long intlist_get_swap_counts(cintlist_t list);

int intelem_get_val(cintelem_t e);

int intiter_has_next(cintiter_t iter);
cintelem_t intiter_next(intiter_t iter);
void intiter_dispose(intiter_t iter);

#endif /* INTLIST_H_INCLUDED */

基本は名前とスコアを要素の値とするsclistと同じである。
これに、関数intlist_newによりリストを生成するか関数intlist_reset_countsを呼んで以降に、
要素の交換と比較処理がそれぞれ何回行われたかの情報を提供する二つの関数を提供する。