链式存储结构的特点
1.优点
1.存储空间动态分配,可以根据实际需要使用
2.不需要地址连续的存储空间
3.插入/删除操作只须通过修改指针实现,不必移动数据元素,操作时间效率高 (无论位于链表何处无论链表长度如何,插入和删除操作的时间都是O(1))
2.缺点
1.每个链结点需要设置指针域(存储密度小)
2.是一种非随机存储结构,查找、定位等操作要通过顺序扫描链表实现,时间效率低O(n)
例题:
请写一个算法,该算法尽可能高的时间效率找到由list所指的线性链表的倒数第k个结点。若找到这样的结点,算法给出该结点的地址,否则给出NULL
限制:1.算法中不得求出链表长度,也不允许对链表进行逆转
2.不允许使用除指针变量和控制变量以外的其他辅助空间
1.设置一个指针变量p,初始时指向链表的第一个结点
2.然后令p后移指向链表的第k个结点 执行k-1次
3.再设置另一个指针变量q,初始时指向链表的第一个结点
4.利用一个循环让p q 同步沿链表向后移动;当p指向链表最后那个结点时,q指向链表的倒数第k个结点 执行n-k次
LinkList SEARCHNODE(LinkList list, int k)
{
LinkList p,q;
int i;
if (list != NULL && k > 0) {
p = p ->link;
if(p == NULL) {
printf(“链表中不存在倒数第k个结点”);
return NULL;
}
}
q = list;
while(p -> link != NULL) {
p = p ->link;
q = q ->link;
}
return q;
}