本篇内容主要讲解“C++双向链表怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++双向链表怎么实现”吧!
#include <iostream> using namespace std; typedef struct node { int data; struct node * front; struct node *next; }NODE; typedef struct doublelist { NODE* head; NODE* tail; }LIST; LIST* create_list() { LIST* list = new LIST; list->head = NULL; list->tail = NULL; return list; } NODE* create_node(int data) { NODE* node = new NODE; node->data = data; node->front = NULL; node->next = NULL; return node; } void list_append(LIST* list, int data) { NODE* node = create_node(data); if(list->tail == NULL) { list->head = node; list->tail = node; } else { list->tail->next = node; node->front = list->tail; list->tail = node; } } void front_print(LIST* list) { NODE* node = NULL; for(node=list->head;node;node=node->next) { cout<<node->data<<" "; } cout<<endl; } void reverse_print(LIST* list) { NODE* node = NULL; for(node =list->tail;node;node=node->front) { cout<<node->data<<" "; } cout<<endl; } NODE* destroy_node(NODE* node) { NODE* next = node->next; delete node; return next; } void clear(LIST* list) { while(list->head) { list->head = destroy_node(list->head); } list->tail = NULL; } void destroy_list(LIST* list) { clear(list); delete list; } void list_insertAfter(LIST* list, int data,int pos) //后插 最起码应该第一个后面 { NODE* find = NULL; for(find =list->head;find;find=find->next) { if(!--pos) { NODE* node =create_node(data); if(find->next == NULL) { node->front =list->tail; list->tail->next = node; list->tail = node; } else { node->front = find; node->next = find->next; find->next->front =node; find->next = node; } } } } void list_delete(LIST* list, int data) { NODE* Front = NULL; NODE* node = list->head; while(node) { if(data == node->data) { if(list->head ==node) { list->head = node->next; node->next->front = NULL; delete node; node = list->head; } else { Front->next = node->next; if(node->next != NULL) { node->next->front = Front; delete node; node = Front->next; } else { list->tail = node->front; delete node; } } } else { Front = node; node = node->next; } } } void list_insertFront(LIST* list,int data,int pos) { //NODE* front = NULL; NODE* find = NULL; for(find=list->head;find;find=find->next) { if(!--pos) { NODE* node = create_node(data); if(find==list->head) { node->next = list->head; list->head->front = node; list->head = node; } else { node->next = find; node->front = find->front; find->front->next = node; find->front = node; } } } } int main() { LIST* list = create_list(); for(int i=10;i<=50;i+=10) { list_append(list, i); } // list_insertAfter(list,55,5); // list_insertAfter(list,15,1); list_insertFront(list,15,2); list_insertFront(list,50,6); list_insertAfter(list,10,7); front_print(list); list_delete(list,10); front_print(list); reverse_print(list); destroy_list(list); return 0; }
到此,相信大家对“C++双向链表怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。