链表

头指针:

  1. 头指针是指向链表第一个结点的指针。
  2. 无论链表是否为空,头指针均不为空。
  3. 头指针是链表的必要元素。
  4. 若链表有头结点,则头指针就是指向头结点的指针。

头结点:

  1. 放在第一个结点之前,其数据域一般无意义(用来存放链表的长度)
  2. 头结点不是链表的必要元素。

typedef struct Node{
    ElemType data;       //数据域
    struct Node* next;   //指针域
} Node;

单链表读取:O(n)

Status GetElem(LinkList L,int i,ElemType *e){
    int j = 0;
    LinkList p;
    p = L->next;
    while (p && j<i) {
        p = p->next;
        ++j;
    }
    if (!p || j>i) {
        return 0;
    }
    *e = p->data;
    return 1;
}

单链表的插入:O(n)

Status ListInsert(LinkList L,int i,ElemType *e){
    int j=0;
    LinkList p = NULL,s;
p = L;
j = 1;
while (p && j<i) { p = p->next; j++; } if (!p || j>i) { return 0; } s = (LinkList)malloc(sizeof(Node)); s->data = *e; p->next = s->next; s->next = p; return 1; }

 

单链表的删除:O(n)

Status ListDelete(LinkList L,int i,ElemType*e){
    int j =0;
    LinkList p = L,s;
    while (p && j <i) {
        p = p->next;
        j++;
    }
    if (!p ||j>i) {
        return 0;
    }
    s = p->next;
    p->next = s->next;
    //释放 s
    return 1;
}
但行好事,莫问前程。
原文地址:https://www.cnblogs.com/yuhui-snail/p/9670364.html