实验程序是用vc6编译,一定注意文件扩展名为c,不是cpp,下载前面几个测试程序(链表、表、原子中有下载链接)中直接将下面源程序覆盖1.c的内容即可!
再次强烈建议在这些函数上设上断点,按F11跟进去把源码走一遍,才有真正的学习效果!
源程序如下:
#include <stdio.h>
#include <stdlib.h> //rand函数使用
#include <string.h>
#include "include/ring.h"
#pragma comment(lib, "libcii.lib")
//模拟一个数据结构,向【环】中添加、删除等操作
typedef struct
{
int x;
}MY_T;
void main()
{
//注意:C语言一定要将这些变量声明放在函数的头部
Ring_T r1, r2;
MY_T my[10];
MY_T *pMy = NULL;
int i=0;
//产生自定义的数据结构
for (; i<10; i++)
{
my[i].x = i *10;
}
//创建序列
// 注意:Ring_seq 函数的最后一个参数为NULL
// Ring_ring 是记下每个加入元素的地址,而不是内容,注意!!
//
r1 = Ring_new();
r2 = Ring_ring( &my[0], &my[1], &my[2], &my[3], &my[4],
&my[5], &my[6], &my[7], &my[8], &my[9], NULL);
//长度
//
printf("r2 len = %d\n", Ring_length(r2));
//
// Ring_get
// 注意,该函数得到的是元素的地址,而不是内容!!
pMy = Ring_get(r2, 1);
printf("r2[1] = %d\n", pMy->x);
//
//修改后,并打印
Ring_put(r2, 0, &my[5]);
pMy = Ring_get(r2, 0);
printf("r2[0] = %d\n", pMy->x);
//
// 添加,在最开始处,关于“最开始”的定义,见书中P132
//
Ring_add(r2, 1, &my[8]);
printf("r2 len = %d\n", Ring_length(r2));
pMy = Ring_get(r2, 0);
printf("r2[0] = %d\n", pMy->x);
//
// 前后端点添加
Ring_addlo(r2, &my[9]);
Ring_addhi(r2, &my[1]);
printf("添加前后端点后r2 len = %d\n", Ring_length(r2));
//
// 删除前后两端端点
Ring_remlo(r2);
Ring_remhi(r2);
printf("删除前后端点后r2 len = %d\n", Ring_length(r2));
//
// 删除,注意:第二个参数是“索引”,而不是“位置”
Ring_remove(r2, 0);
printf("r2 len = %d\n", Ring_length(r2));
pMy = Ring_get(r2, 0);
printf("删除索引0后r2[0] = %d\n", pMy->x);
//
// 旋转——右旋一个位置
Ring_rotate(r2, 1);
pMy = Ring_get(r2, 0);
printf("旋转r2[0] = %d\n", pMy->x);
}