插入及删除

来源:互联网 发布:吉他弹唱手机录音软件 编辑:程序博客网 时间:2024/06/05 06:33

插入及删除

// 将一个 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;