小狼,你家BOSS喊你面试啦!!!(五)

1、链表和数组的区别

(1)逻辑结构:数组大小是在声明数组时就要知道;链表大小动态申请,不必事先知道。

(2)存储位置:数组(栈上一段连续的内存);链表(动态申请的堆内存,可以是不连续的内存)

(3)特点不同:数组的特点是随机访问效率高,但是删除和添加元素效率低,要移动多个元素;链表则是增加和删除结点效率高,但要访问只能从链表的头开始遍历,随机访问时效率低。

(4)数组有越界问题;链表则不会存在越界问题。

2、何时选用顺序表、何时选择链表作为线性表的存储结构为宜

如果经常查找、随机访问,则用顺序表;如果经常进行增删操作,就用链表。

3、如何使用链表头

这里就是头结点和头指针的概念了。单链表的头结点数据域没有数据(或者有链表长度信息等),头结点指针域指向第一个链表的第一个元素。

头指针就是指向链表开始结点(第一个结点)的指针。

4、如何实现单链表的插入和删除操作

这里简写啦,因为在数据结构章节有这部分的输入。

插入结点s:s->next=p->next;p->next=s;

删除结点s:r=p->next;p->next=r->next;free(p)

5、如何找出单链表中倒数第K个元素

维持两个索引,一个先行,直到第一个走了K-1个元素后,两个指针再一起移动,每次移动一步;等先行的指针为NULL时,第二个指针就指向倒数第K个了。

6、如何进行单向链表的翻转

 反转后头结点变成尾结点了

原文地址:https://www.cnblogs.com/westlife-11358/p/9461592.html