本篇内容主要讲解“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++双向链表怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4511602/blog/4826865