插入及删除
// 将一个 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;
|