Linux下怎样编写优美的C代码(4)

清单 3. 插入及删除

// 将一个 node 插入到一个 list 对象上
void insert(void *node){
Node *current = (Node*)malloc(sizeof(Node));

current->data = node;
current->next = list->_this->head->next;
list->_this->head->next = current;
(list->_this->size)++;
}

// 删除一个指定的节点 node
void drop(void *node){
Node *t = list->_this->head;
Node *d = NULL;
int i = 0;
for(i;i < list->_this->size;i++){
d = list->_this->head->next;
if(d->data == ((Node*)node)->data){
list->_this->head->next = d->next;
free(d);
(list->_this->size)--;
break;
}else{
list->_this->head = list->_this->head->next;
}
}
list->_this->head = t;


其他的实现代码可以参看下载部分,这里限于篇幅就不再意义列举出来。

测试

测试代码

好了,前面做的一切工作都是为了保证我们的暴露给使用者的 API 可以尽量的简洁,优美,现在到测试的时候了:

清单 4. 测试代码

int main(int argc, char** argv) {
List *list = (List*)ListConstruction();// 构造一个新的链表

// 插入一些值做测试
list->insert("Apple");
list->insert("Borland");
list->insert("Cisco");
list->insert("Dell");
list->insert("Electrolux");
list->insert("FireFox");
list->insert("Google");

list->print();// 打印整个列表

printf("list size = %d\n",list->getSize());

Node node;
node.data = "Electrolux";
node.next = NULL;
list->drop(&node);// 删除一个节点

node.data = "Cisco";
node.next = NULL;
list->drop(&node);// 删除另一个节点

list->print();// 再次打印
printf("list size = %d\n",list->getSize());
list->clear();// 清空列表

return 0;
}

图 1. 运行结果

Linux下怎样编写优美的C代码

运行结果

结束语

C 语言所诞生的UNIX平台提倡这样一种设计哲学:尽量进行简单的设计,让使用者如同搭积木一样的将这些简单的工具连接成强大的,完整的应用。 应该说,C 比较好的继承了这一点,C 语言非常简洁,非常强大,而由于 C 语言诞生的比较早,当时的面向对象的思想还不成熟,所以出现了大量的过程式的 C 应用,从而给人们一种 C 语言是面向过程的语言的错觉,其实 C 只是提供了一些简单,强大而通用的能力,至于你想将其搭成什么样的积木,则全靠你自己了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpfsj.html