首页 > 代码库 > 第三篇、双向链表(循环链表)
第三篇、双向链表(循环链表)
简介:
在用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 =http://www.mamicode.com/ 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 =http://www.mamicode.com/ 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; } }}
第三篇、双向链表(循环链表)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。