链表学习(3)

1、线性结构与非线性结构,主要看元素之间的关系。若是一对一关系就是线性表,如果不是一对一就是非线性。

 

2LS=((a,b,c),(d,e,f));

tail(LS)=((d,e,f));

head(tail(LS))=(d,e,f);

tail(head(tail(LS)))=(e,f);

head(tail(head(tail(LS))))=e;

任何一个非空广义表的表头是表中第一个元素,可以是原子,也可以是子表,而其表尾必定是子表。

广义表的head操作,取出的元素是什么,那么结果就是什么。但是tail操作取出的元素外必须加一个表“()”

 

3单循环链表的主要优点:从表中任一结点出发都能扫描整个链表。单循环表由于不知道前趋,所以在删除时候必须从需要删除的结点的前趋下手,因此并非单循环链表的有点。

 

头指针是链表的必要元素,不管链表是否为空,头指针都不为空。

链表在内存中都是独立的存储单元,通过地址进行指向链接,不论是否是单循环还是双循环链表,在进行插入操作时都会断开。

4将两个各有n个元素的有序表归并成一个有序表,其最多的比较次数是:2n-1

分析:前n-1个每个最多比较两次,最后一个只比较一次。

 

5n个记录的线性表进行快速排序为减少算法的递归深度,每次分区后,先处理较短的部分。

 

6、已知两个长度分别为mn的升序链表,若将它们合成一个长度为m+n的降序链表,则最坏的情况下时间复杂度是:O(m+n).

分析:最好、最坏情况,时间复杂度都是O(m+n),因为题目要求是两个升序链表,合并成一个降序链表。

 

补充:将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为:O(N*M*logN)

 

补充2:两个无环点链表L1L2,其长度分别为mnm>n),判定L2L1是否相交的时间复杂度:O(m+n),空间复杂度:O(1)

 

7单向链表:

1)如果两个单向链表相交,尾结点一定相同。

(如果两个链表都为单链表,那么一旦相交意味着两个节点的next相同,之后也都相同,所以尾结点也相同)

2)快慢指针是判断一个单向链表有没有环的一种方法。(如果一个是单链表,一个有环,就不可能存在相交的情况。这其中判断链表是否有环就是用的快慢指针法:设置两个指针,一个跳一格,一个跳两格,追上自然有环。)

3)有环的单向链表跟无环的单向链表不可能相交。

4)两个单向链表之间相交可以存在环。(如果都是循环链表,遍历其中一个链表,直到找到与另一链表中某结点相同的结点就算是相交。)

 

8、设顺序表长度为n,最坏情况下,

1)寻找最大项比较次数:n-1

2)顺序查找比较次数:n

3)快速排序比较次数:n*(n-1)/2

4)堆排序:nlogn

 

9、线性表元素个数nn>=0)定义为线性表的长度、

10、带头结点的单链表head为空的判定条件:head->next==NULL;

带头结点的循环链表:head->next==head;

不带头结点的单链表head为空的判定条件:head==NULL

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值