1、数据结构中的容器
当很频繁地对序列中部进行插入和删除操作时,应该选择使用的容器是(B )
A vector B list C deque Dstack
vector一般使用连续的一段内存区域来实现,适合数据变化不大或者仅在末尾添加删除元素的情形;list使用链表方式实现,如果数据变化频繁,首选list;deque是双向队列,一般使用分段连续存储的方式实现,而stack是堆栈,原则上只能在栈顶进行压栈、出栈操作。
2、考察链表
eg1、判断一个单向链表中是否存在环的最佳方法是( )
A 两重遍历 B 快慢指针 C 路径记录 D 哈希表辅助
正确答案是: B,您的选择是:C
解析:
定义两个指针fast和slow,每次slow后移一个结点,fast后移两个结点。最开始都在链表头部开始向后移动,如果单链表没有环,fast会达到或超过链表尾部,算法结束;若链表有环,最终两个指针都会进入环中,形成fast指针追赶slow指针的情况,直到某时刻fast和slow相等。此时即可判断链表是有环的。事实上,进一步,这是可以将任意一个指针拉会整个链表头部,另一个指针继续移动,此时两个指针都是一次后移一个结点,当二者再次相遇的结点,即为单链表的环的起始位置。
eg2:设某链表中最常用的操作是在链表的尾部插入或删除元素,假定链表只记录表头指针,则选用下列( )存储方式最节省运算时间。
A 单向链表 B 单向循环链表 C 双向链表 D 双向循环链表
正确答案是:D,您的选择是:A
解析:
在尾部插入或者删除,需要记录尾结点的前驱,即倒数第2个结点;因为只能通过链表头指针找到倒数第2个结点,如果能够从后向前遍历,则经过两次即可找到它。因此,需要双向循环链表。 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
eg3、链表不具备的特点是( )
A可随机访问任何一个元素 B插入、删除操作不需要移动元素 C无需事先估计存储空间大小 所需存储空间与线性表长度成正比
正确答案是:A,您的选择是:C
解析:
无论单向链表还是双向链表,都只是记录当前结点的前驱或(和)后继。因此,不能随机访问任意元素。但插入、删除操作不需要移动元素,也不需要事先给定