链表
头指针:
- 头指针是指向链表第一个结点的指针。
- 无论链表是否为空,头指针均不为空。
- 头指针是链表的必要元素。
- 若链表有头结点,则头指针就是指向头结点的指针。
头结点:
- 放在第一个结点之前,其数据域一般无意义(用来存放链表的长度)
- 头结点不是链表的必要元素。
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; }
但行好事,莫问前程。