数据结构总结之链表(一)

  1. 线性表
    (1)顺序存储结构(数组,必须连续空间)
    优点: 不需要为表中元素之间的逻辑结构添加额外的存储空间
    可以快速的存取表中任一位置的元素
    缺点: 插入和删除操作需要移动大量元素
    当线性表长度变化比较大时,难以确定存储空间的容量
    易造成存储空间的 “碎片 ”
    (2)链式存储结构(连续或不连续,由数据域和指针域组成,称为结点)
    头指针与头节点异同:
    头指针具有标识作用,常以头指针冠以链表的名字 ,无论链表是否为空,头指针均不为空,头指针是链表的必要元素。
    头结点是为了统一操作而设立的,放在第一元素的结点之前,其数据域一般毫无意义(可存放链表的长度),有了头节点,对在第一元素节点前插入结点和删除结点,其操作与其他结点操作统一,头结点不一定是链表必要元素。
    数据结构总结之链表(一)
    链表的插入与删除
    插入:头插法,让头指针指向新结点,始终让新结点处于第一位置
```
  p=(LinkList)malloc(sizeof(Node));
  p->data = rand()%100 + 1;//随机数生成100以内的数字为新结点的数据域
  p->next = (*L)->next;
  (*L)->next = p; //头指针指向新结点
```

尾插法:新的结点始终插在终端结点的后面

r = *L;                 //*r为指向尾部的结点
p=(LinkList)malloc(sizeof(Node));
p->data = rand()%100 + 1;      //随机数生成100以内的数字为新结点的数据域
r->next = p ;
r = p;
r->next = null;     //表示当前链表结束

单链表整表删除:free(p); p = p -> next;

单链表结构与顺序存储结构优缺点:
存储方式:
顺序存储结构用一段连续的存储单元依次存储线性表的数据元素;
单链表采用链式存储结构,用一组任意的存储的单元存放线性表的元素;
时间性能:
查找: 顺序存储O(1) 单链表O(n)
插入删除: 顺序存储结构需要平均移动表长一半的元素,时间为O(n);单链表在找出某位置的指针后,插入和删除仅为O(1);
空间性能:
顺序存储结构需要预分配存储空间,分大造成浪费,分小发生上溢。 单链表不需要分配存储空间,元素个数不受限制。

还有一些链表 :静态链表,循环链表(终端结点的指针端由空指针改为指向头结点),双向链表,