C语言实现通用链表初步(三)----单元测试
前两节,我们已经完成了链表的一些操作,快来测试一下吧。
这里使用的单元测试工具名字叫“check”。
START_TEST(my_slist_1)
{
struct student students[8] = {{"WangDong",18},{"LiuMing",19},{"SunYazhou",21},{"ChenYu",27},{"LiuXuewei",28},\
{"ZhangGuorong",47},{"LiuDehua",53},{"WangGuozhen",48}};
struct slist_info list;
slist_init(&list);
int i = 0;
for(;i<sizeof(students)/sizeof(students[0]);++i)
list.insert_head(students+i,&list);
list.for_each(&list,print_student);
我们先定义了一个数组,里面存放了姓名,年龄。接下来定义一个链表,并初始化。然后调用插入方法,依次插入。遍历一下,打印出来:
void print_student(void *data)
{
struct student *p = data;
printf("Name: %15s Age:%d\n",p->name,p->age); }
用到了这个回调函数。看看打印的结果:
Name: WangGuozhen Age:48
Name: LiuDehua Age:53
Name: ZhangGuorong Age:47
Name: LiuXuewei Age:28
Name: ChenYu Age:27
Name: SunYazhou Age:21
Name: LiuMing Age:19
Name: WangDong Age:18
接着刚才这个测试用例,
struct node_info *p = list.find(&list,compare_student,&students[3]);
list.del(p,&list);
list.for_each(&list,print_student);
我们寻找某个节点(ChenYu),然后删除。
比较的回调函数是:
int compare_student(void *dest,void *src)
{
struct student *p1 = dest;
struct student *p2 = src;
if(strcmp(p1->name,p2->name)==0)
return 1;
else
return 0;
}
结果如图:
Name: WangGuozhen Age:48
Name: LiuDehua Age:53
Name: ZhangGuorong Age:47
Name: LiuXuewei Age:28
Name: SunYazhou Age:21
Name: LiuMing Age:19
Name: WangDong Age:18
再测试一下反转:
list.invert(&list);
list.for_each_safe(&list,print_student);
}
END_TEST
结果是:
Name: WangDong Age:18
Name: LiuMing Age:19
Name: SunYazhou Age:21
Name: LiuXuewei Age:28
Name: ZhangGuorong Age:47
Name: LiuDehua Age:53
Name: WangGuozhen Age:48
测试成功!
C语言实现通用链表初步(三)----单元测试的更多相关文章
- C语言实现通用链表初步(一)
注意:本文讨论的是无头单向非循环链表. 假设不采用Linux内核链表的思路,怎样用C语言实现通用链表呢? 一种常用的做法是: typedef int element_t; struct node_in ...
- C语言实现通用链表初步(四)----双向链表
在前面的文章中,我们讨论了如何实现通用类型的链表,方法是用void *类型的指针,指向数据.那么还有其他的方法吗(不考虑内核链表)? 答案是肯定的.用零长数组也可以实现. struct node_in ...
- C语言实现通用链表初步(二)
接着上次的内容,我们继续! 还是无头单向非循环链表.假如要删除某个节点,如何实现? //删除成功返回0,失败返回-1 int slist_del(struct node_info *node, str ...
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
上午写了下单向循环链表的程序,今天下午我把双向链表的程序写完了.其实双向链表和单向链表也是有很多相似的地方的,听名字可以猜到,每个节点都包含两个指针,一个指针指向上一个节点,一个指针指向下一个节点.这 ...
- c语言实现基本的数据结构(二) 链表(包括链表的三种简单排序算法)
#include "stdafx.h" #include <stdlib.h> //创建一个节点,data为value,指向NULL Node* Create(int ...
- C语言实现单链表-03版
在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...
- C 封装一个通用链表 和 一个简单字符串开发库
引言 这里需要分享的是一个 简单字符串库和 链表的基库,代码也许用到特定技巧.有时候回想一下, 如果我读书的时候有人告诉我这些关于C开发的积淀, 那么会走的多直啊.刚参加工作的时候做桌面开发, 服务是 ...
- Radmin Server-3.5 完美绿色破解版(x32 x64通用) 第三版 + 单文件制作方法
Radmin Server v3.5 汉化破解绿色版(x32 x64通用) 第三版 下载链接: https://pan.baidu.com/s/1qYVcSQo 2016年7月8日更新第三版1.修复在 ...
- C语言实现单链表-02版
我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...
随机推荐
- Java50道经典习题-程序41 猴子分桃
题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿 ...
- Oauth Client Credentials Grant
http://www.cnblogs.com/dudu/p/4569857.html OAuth真是一个复杂的东东,即使你把OAuth规范倒背如流,在具体实现时也会无从下手.因此,Microsoft. ...
- 算法训练 最大的算式(DP)
问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...
- IDEA 基本操作
1.IDEA 编译的JDK问题 点击出错的模块 将这个改成8,但是改了这个还是不行,项目一编译他有回去了. 正确的做法: 在跟pom.xml 中增加如下代码: <build> <pl ...
- Js判断参数(String,Array,Object)是否为undefined或者值为空
在一些前端控件要提交数据到服务器端的数据验证过程中,需要判断提交的数据是否为空.如果是普通表单的字符串数据,只需要在 trim 后判断 length 即可,而这里需要的数据可以是各种不同的类型,通过 ...
- loj #2008. 「SCOI2015」小凸想跑步
#2008. 「SCOI2015」小凸想跑步 题目描述 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸 n nn 边形,N NN 个顶点按照逆时针从 0∼n−1 0 ...
- Google Maglev 牛逼的网络负载均衡器(转)
https://segmentfault.com/a/1190000009565788 Maglev 是什么 Maglev 是谷歌搞的一个工作在三层(IP层)的网络负载均衡器, 它是一个运行在普通的 ...
- loj#6229 这是一道简单的数学题
\(\color{#0066ff}{ 题目描述 }\) 这是一道非常简单的数学题. 最近 LzyRapxLzyRapx 正在看 mathematics for computer science 这本书 ...
- P3379 【模板】最近公共祖先(LCA)(LCT)
\(\color{#0066ff}{ 题目描述 }\) 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. \(\color{#0066ff}{输入格式}\) 第一行包含三个正整数N.M. ...
- Python:raw_input 和 input用法
转自:http://blog.csdn.net/kjing/article/details/7450146 Python input和raw_input的区别 使用input和raw_input都可以 ...