第三篇双向链表(循环链表)
Posted 久冬不雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三篇双向链表(循环链表)相关的知识,希望对你有一定的参考价值。
简介:
在用C/C++开发系统中,我们知道用数组或者单链表来开发,如果是数据比较大的话,性能很不好,效率也不高。因此常常需要考虑系统的实用性,常常采用双向链表来开发。
示例:
1.数据
typedef struct node{ int data; // 数据 struct node *last; // 前一个数据节点 struct node *next; // 后一个数据节点 }Node; typedef struct { Node *head; Node *tail; }LinkList;
2.创建链表
LinkList *createList() { LinkList *list = malloc(sizeof(LinkList)); list -> head = NULL; lsit ->tail = NULL; return list; }
3.插入
3.1头插法
void addNodeBeHead(LinkList *list,int num) { Node *p = malloc(sizeof(Node)); p -> data = num; p -> last = NULL; P -> next = NULL; if(list - > head != NULL) { // 1.指向新的节点 // 2.新节点的next指向原来的节点 // 3.新节点变成头节点 list ->head->last = p; node ->next = list ->head; list -> head = p; } else{ list -> head = P; list -> tail = p; } }
3.2尾插法
void addNodeAfterTail(LinkList *list,int num) { Node *p = malloc(sizeof(Node)); p -> data = num; p -> last = NULL; P -> next = NULL; if(list - > head != NULL) { // 1.指向新的节点 // 2.新节点的last指向原来的节点 // 3.新节点变成尾节点 list ->tail->next = p; node ->last = list -> tail; list -> tail = p; } else{ list -> head = P; list -> tail = p; } }
4.打印链表
void printList(LinkList *list) { Node *p = list -> head; if(p == NULL) { printf("当前为空链表"); }else { while(p != NULL) { printf("%s",p-> data); p = p-> next; } } }
以上是关于第三篇双向链表(循环链表)的主要内容,如果未能解决你的问题,请参考以下文章