Ring_T 环(双向链表)
一个5元素环:
/* head永远指向sing[0].
* 一个5元素环:
* lo hi
* 1 2 3 4 5 6 > 位置
* ---------------------
* | 0 | 1 | 2 | 3 | 4 | > 索引
* | a | b | c | d | e | > 值
* ---------------------
* -5 -4 -3 -2 -1 0 > 位置
* ^
* |
* head
*
* */
接口:
T Ring_new (void);
T Ring_ring(void *x, ...);
void Ring_free (T *ring);
int Ring_length(T ring);
void *Ring_get(T ring, int i);
void *Ring_put(T ring, int i, void *x);
void *Ring_add(T ring, int pos, void *x);
void *Ring_addlo(T ring, void *x);
void *Ring_addhi(T ring, void *x);
void *Ring_remove(T ring, int i);
void *Ring_remlo(T ring);
void *Ring_remhi(T ring);
void Ring_rotate(T ring, int n); /* 对ring旋转进行重新编号 */
实现文件:
include/ring.h
src/ring.c
ring.h
/* $Id: ring.h 6 2007-01-22 00:45:22Z drhanson $ */
#ifndef RING_INCLUDED
#define RING_INCLUDED
#define T Ring_T
typedef struct T *T;
extern T Ring_new (void);
extern T Ring_ring(void *x, ...);
extern void Ring_free (T *ring);
extern int Ring_length(T ring);
extern void *Ring_get(T ring, int i);
extern void *Ring_put(T ring, int i, void *x);
extern void *Ring_add(T ring, int pos, void *x);
extern void *Ring_addlo(T ring, void *x);
extern void *Ring_addhi(T ring, void *x);
extern void *Ring_remove(T ring, int i);
extern void *Ring_remlo(T ring);
extern void *Ring_remhi(T ring);
extern void Ring_rotate(T ring, int n);
#undef T
#endif
ring.c
/* 环(双向链表) */
/* head永远指向sing[0].
* 一个5元素环:
* lo hi
* 1 2 3 4 5 6 > 位置
* ---------------------
* | 0 | 1 | 2 | 3 | 4 | > 索引
* | a | b | c | d | e | > 值
* ---------------------
* -5 -4 -3 -2 -1 0 >