• 双链表


     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 */
  • 相关阅读:
    [转载]服务器管理模块forever——Nodejs中间件系列
    [转载]NodeJS的异步编程风格
    break和continue的区别?
    JavaScript中遍历数组的方法
    行盒
    雪碧图
    将一个块级元素水平和垂直居中的方法
    Linux使用rdesktop连接Windows桌面
    git常用操作
    TiddlyWiki搭建个人博客
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/10674398.html
Copyright © 2020-2023  润新知