什么是链表?
链表是一种线性表,是一种在物理存储单元上非连续非顺序的存储结构。链表由一系列的节点构成,节点在运行时动态生成,每个节点包括数据域、指针域。
链表的优点:
1、链表是一个动态的数据结构,能够根据需要变化大小;
2、插入和删除的操作非常的方便,耗时少;
3、动态数据结构比如栈或队列可以用链表来实现;
4、元素可以从中间添加或者移除。
链表的缺点:
1、因为指针的存在,相对于数组会耗费更多的空间;
2、节点必须从头开始按顺序读取,而数组可以直接精确定位到哪一个;
3、节点存储是不规则的,即它存放的地址是不连续的,那么访问链表中的各个元素所需时间会大大增加;
4、当涉及到反向遍历时,链表又会出现新的困难。比如单向链表向后遍历的时候是非常麻烦的,对于双向链表来说,向后遍历就非常容易,但是反向指针又会消耗内存。
单链表
单链表结构体
typedef struct Node{
struct Node *link;
ElemType value;
}Node,*Linkedlist;
单链表的插入
int sll_insert(register Node **linkp,int new_value){
register Node *current;
register Node* new;
while((current = *linkp) != NULL && current->value < new_value)
linkp = ¤t->link;
new = (Node *)malloc(sizeof(Node));
if(new == NULL)
return FALSE;
new->value = new_value;
new->link = current;
*linkp = new;
return TRUE;
}
register Node *current;
register Node* new;
while((current = *linkp) != NULL && current->value < new_value)
linkp = ¤t->link;
new = (Node *)malloc(sizeof(Node));
if(new == NULL)
return FALS