摘要:
本文主要介绍解决单向链表上的一些操作的思路和代码实现。主要的问题包括以下几点:
1 向单向链表中的插入一个节点
2 删除单向链表中的一个节点
3 查找单向链表中的一个节点
扩展问题1:查找单向链表中的倒数第k个节点。
扩展问题2:查找单向链表中的中间节点,当节点个数为偶数时返回中间两个元素中的前者(后者)
4反转单向链表(非递归实现)
5反转单向链表(递归实现)
6判断单向链表是否有环
7判断两个单向链表是否相交
扩展问题:返回两个链表的第一个交点。
8 用单链表实现栈,要求push和pop的时间复杂度为O(1)
9 用单链表实现队列,要求enQueue和deQueue的时间复杂度为O(1)
10 在一个链表中删除另一个链表中的元素(即求差集(A-B)) 阅读全文
摘要:
众所周知,在计算机中要对给定的数据集进行若干处理,首要任务是把数据集的一部分(当数据量非常大时,可能只能一部分一部分地读取数据到内存中来处理)或全部存储到内存中,然后再对内存中的数据进行各种处理。 例如,对于数据集S{1,2,3,4,5,6},要求S中元素的和,首先要把数据存储到内存中,然后再将内存中的数据相加。 当内存空间中有足够大的连续空间时,可以把数据连续的存放在内存中,各种编程语言中的数组一般都是按这种方式存储的(也可能有例外),如图1(b);当内存中只有一些离散的可用空间时,想连续存储数据就非常困难了,这时能想到的一种解决方式是移动内存中的数据,把离散的空间聚集成连续的一块大空间,. 阅读全文