列表ADT算法比较与泛型ADT实现
1. 无序和有序列表ADT算法复杂度比较
在分析列表操作算法的复杂度时,我们首先要确定规模因子。对于列表操作算法,规模因子就是列表中的元素数量 numItems
。
一些算法在无序列表ADT和有序列表ADT中是相同的,如 lengthIs
、 isFull
、 reset
和 getNextItem
方法,它们的复杂度均为O(1),因为执行的语句数量不依赖于列表中的元素数量。
1.1 无序列表ADT
- isThere操作 :该操作需要遍历列表,直到找到目标元素或到达列表末尾。最好情况下只需检查一个位置,最坏情况下需要检查
numItems
个位置,平均和最坏情况复杂度均为O(numItems)。 - insert操作 :分为找到插入位置和插入元素两部分。在无序列表中,元素直接插入到
numItems
位置并递增numItems
,复杂度为O(1)。 - delete操作 :同样分为找到要删除的元素和删除元素两部分。查找元素的复杂度为O(numItems),删除元素时将
numItems - 1
位置的值放入要删除元素的位置并递减numItems
,这部分复杂度