假设一动态集合S用一个长度为m的直接寻址表T来表示。请给出一个查找S中最大元素的过程。你所给的过程在最坏情况下的运行时间是多少。
(算法导论第十一章11.1-1)
#include "KeyNode.h"
template<typename T>
KeyNode<T>* direct_address_search(KeyNode<T>** array,int k)
{
return array[k];
}
template<typename T>
void direct_address_insert(KeyNode<T>**array,KeyNode<T>* value)
{
array[value->key] = value;
}
template<typename T>
void direct_address_delete(KeyNode<T>**array,KeyNode<T>* value)
{
array[value->key] = nullptr;
}
template<typename T>
KeyNode<T>* find_maximum(KeyNode<T>**array,int size)
{
KeyNode<T>* max = nullptr;
for (int i = 0; i < size; ++i) {
if(array[i]!= nullptr)
{
if(max == nullptr)
{
max = array[i];
}
else if(max->value<array[i]->value)
{
max = array[i];
}
}
}
return max;
}
辅助类
1⃣️KeyNode地址
测试代码
#include "chapter11_1.h"
#include "KeyNode.h"
int main()
{
int size = 10;
KeyNode<int>** array = new KeyNode<int>*[size];
KeyNode<int>* node0 = new KeyNode<int>(0,0);
KeyNode<int>* node1 = new KeyNode<int>(1,1);
KeyNode<int>* node2 = new KeyNode<int>(2,2);
KeyNode<int>* node3 = new KeyNode<int>(3,3);
direct_address_insert(array,node0);
direct_address_insert(array,node1);
direct_address_insert(array,node2);
direct_address_insert(array,node3);
cout<<direct_address_search(array,node3->key)->value<<endl;
direct_address_delete(array,node3);
cout<<direct_address_search(array,node3->key)<<endl;
cout<<find_maximum(array,size)->value<<endl;
delete[] array;
delete node0;
delete node1;
delete node2;
delete node3;
return 0;
}
时间复杂度O(m)