您的位置:首页 > 其它

线性表学习笔记之链表

2013-11-12 15:01 197 查看

原创博文,转载请注明出处

链表分类:单链表,插入删除和查找的时间复杂度均为O(n)

双链表,插入、删除和查找的时间复杂度为O(1)

循环链表,表中最后一个节点的指针不是NULL,而改为指向头结点,从而整个链表形成一个环。

静态链表,借助数组来描述线性表的链式存储结构,这儿的指针是结点的相对地址。和顺序表一样需要预先分配一块连续的内存空间。以next==0作为其结束的标志。

综合应用:

    1.设计一个递归算法,删除不带头节点的单链表L中所有值为x的节点。

思路:可以设计一个函数f(L,x)删除以L为首结点指针的单链表中所有值为x的结点,那么f(L->next,x)则是删除以L->next为首结点指针的单链表中所有值等于x的结点。

借助一个递归工作栈,深度为O(n),时间复杂度为O(n)

DLinkList Locate(DLinkList &L, ElemType x){
DNode *p=L->next, *q;
while(p&&p->data!=x)
p=p->next;
if(!p){
printf("不存在值为x的结点\n");
exit(0)
}
else{
p->freq++;
p->next->pred=p->pred;
p->pred->next=p->next;
q=p->pred;
while(q->freq<p->freq&&q!=L)
q=q->pred;
p->next=q->next;
q->next->pred=p;
q->next=p;
p->pred=q;
}
return p;          //返回值为x的结点的指针
}


View Code
欢迎查看关于顺序表的学习,见上篇/article/7003150.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐