双链表

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct node
 4 {
 5     int data;//数据域
 6     struct node* pre;//前驱  指向上一个
 7     struct node* next;//后继  指向下一个
 8 }NODE;
 9 
10 
11 void insertData(NODE*head, int data);
12 
13 int main()
14 {
15     NODE* head = (NODE*)malloc(sizeof(NODE));  //循环双链表
16     head->next = head->pre = head;//只有一个结点时候 它的前驱和后继都是自己
17 
18     for (int i = 0; i < 10; ++i) insertData(head, i);
19 
20 
21 
22     NODE*p = head->next;//从第二个节点开始
23     while (p != head)
24     {
25         printf("%d	", p->data);
26         p = p->next;
27     }
28 
29     getchar();
30     return 0;
31 }
32 
33 void insertData(NODE*head, int data)
34 {
35     NODE*p = (NODE*)malloc(sizeof(NODE));
36     p->data = data;//放入数据
37 
38 #if 0//插入部分  头插
39     NODE*q = head->next;
40 
41     head->next = p;
42     p->pre = head;
43     p->next = q;
44     q->pre = p;
45 #else //尾插
46     NODE *q = head->pre; //指向最后一个结点
47     q->next = p;
48     p->pre = q;
49     head->pre = p;
50     p->next = head;
51 #endif
52 }
53 
54 
55 /*
56 优点 在任意地方插入和删除效率都高
57     循环双链表可以快速定位头尾
58 
59 缺点  每个结点都要有两个指针保存位置  浪费一点内存
60         查找同样从前往后 一个个找
61 
62 
63 要大量插入删除数据--->链表这种结构
64 
65 
66 增删改查  快速查找  排序之后的数组  
67         二叉树
68 
69 
70 先写出来就行了--->效率  时间复杂度 空间复杂度
71 
72 
73 
74 一个同学的一组成绩   这个可以视为一个数据
75 data换成数组
76 
77 
78 
79 一个班全部放到一个结点中  链表只有一个结点
80 
81 */
原文地址:https://www.cnblogs.com/liugangjiayou/p/10674398.html