上一篇用数组实现了线性表的存储,但是这种方式在插入和删除元素时,需要通过元素的移动来实现,效率比较低。而且在估计的最大数组个数小于实际情况时,不好处理。我们可以通过链式存储来实现,是通过“链”来连接元素,因此对于线性表的插入和删除只需要对链进行操作即可。
我们将链表中的一个节点表示为如下(每个节点都包含一个指向下一个节点的指针):
typedef int ElementType; //定义元素类型
typedef struct LNode * pToLnode; //定义一个结构体指针
struct LNode {
ElementType Data; //表示当前节点存储的元素
pToLnode next; //指向下一个节点
};
我们用List来表示这个链表的表头节点指针:
typedef pToLnode List;
//List L; 代表了一个链表
typedef pToLnode Position; //表示指向某个节点的指针
下面来看一下这个链表的相关操作:
链表的长度:
如果是数组方式的线性表,可以直接返回last+1表示长度,但是在链式表中,只能通过遍历链表实现查询长度。
int getLength(List L){ //求表长
Position p = L;
int length = 0;
while(p){
p = p->next;
length++;
}
return length;