C语言接口与实现-创建可重用软件的技术(笔记12)


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   >

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值