设为首页 加入收藏

TOP

C语言面向对象编程(五):单链表实现(二)
2014-11-23 20:15:39 来源: 作者: 【 】 浏览:34
Tags:语言 面向 对象 编程 单链表 实现
if(pos < list->size) { int i = 0; struct slist_node * p = list->head; struct slist_node * prev = list->head; for(; i < pos; i++) { prev = p; p = p->next; } if(p == list->head) { /* replace at head */ node->next = list->head->next; list->head = node; } else { prev->next = node; node->next = p->next; } if(node->next == 0) list->tail = node; if(list->free_node) list->free_node(p); else free(p); } return list; } static struct slist_node * _find_by_key(struct single_list *list, void * key) { if(list->key_hit_test) { struct slist_node * p = list->head; while(p) { if(list->key_hit_test(p, key) == 0) return p; p = p->next; } } return 0; } static struct slist_node *_first_of(struct single_list* list) { return list->head; } static struct slist_node *_last_of(struct single_list* list) { return list->tail; } static struct slist_node *_node_at(struct single_list * list, int pos) { if(pos < list->size) { int i = 0; struct slist_node * p = list->head; for(; i < pos; i++) { p = p->next; } return p; } return 0; } static struct slist_node * _take_at(struct single_list * list, int pos) { if(pos < list->size) { int i = 0; struct slist_node * p = list->head; struct slist_node * prev = p; for(; i < pos ; i++) { prev = p; p = p->next; } if(p == list->head) { list->head = p->next; if(list->head == 0) list->tail = 0; } else if(p == list->tail) { list->tail = prev; prev->next = 0; } else { prev->next = p->next; } list->size--; p->next = 0; return p; } return 0; } static struct slist_node * _take_by_key(struct single_list * list, void *key) { if(list->key_hit_test) { struct slist_node * p = list->head; struct slist_node * prev = p; while(p) { if(list->key_hit_test(p, key) == 0) break; prev = p; p = p->next; } if(p) { if(p == list->head) { list->head = p->next; if(list->head == 0) list->tail = 0; } else if(p == list->tail) { list->tail = prev; prev->next = 0; } else { prev->next = p->next; } list->size--; p->next = 0; return p; } } return 0; } static struct single_list *_remove_node(struct single_list * list, struct slist_node * node) { struct slist_node * p = list->head; struct slist_node * prev = p; while(p) { if(p == node) break; prev = p; p = p->next; } if(p) { if(p == list->head) { list->head = list->head->next; if(list->head == 0) list->tail = 0; } else if(p == list->tail) { prev->next = 0; list->tail = prev; } else { prev->next = p->next; } if(list->free_node) list->free_node(p); else free(p); list->size--; } return list; } static struct single_list *_remove_at(struct single_list *list, int pos) { if(pos < list->size) { int i = 0; struct slist_node * p = list->head; struct slist_node * prev = p; for(; i < pos ; i++) { prev = p; p = p->next; } if(p == list->head) { list->head = p->next; if(list->head == 0) list->tail = 0; } else if(p == list->tail) { list->tail = prev; prev->next = 0; } else { prev->next = p->next; } if(list->free_node) list->free_node(p); else free(p); list->size--; } return list; } static struct single_list *_remove_by_key(struct single_list *list, void *key) { if(list->key_hit_test) { struct slist_node * p = list->head; struct slist_node * prev = p; while(p) { if(list->key_hit_test(p, key) == 0) break; prev = p; p = p->next; } if(p) { if(p == list->head) { list->head = list->head->next; if(list->head == 0) list->tail = 0; } else if(p == list->tail) { prev->next = 0; list->tail = prev; } else { prev->next = p->next; } if(list->free_node) list->free_node(p); else free(p); list->size--; }
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C指针原理(59)-Ncurses-文本终端.. 下一篇C指针原理(60)-Ncurses-文本终端..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: