假设一动态集合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)