简介:
在用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; } } }
时间: 2024-10-16 01:31:08