#include <iostream>
using namespace std;
template <typename T>
struct Node
{
T data;
Node *link;
Node():data(T()),link(NULL){}
};
template<typename T>
struct M_Node
{
Node<T> *adj;//保存节点指针.
T data; //保存当前递减数字个数.
};
template<typename T>
class HashList
{
public:
HashList(int n)
{
node = new M_Node<T>[n];
for(int i=0;i<n;i++)
{
node[i].data = 0;//递减节点个数都初始化为0.
}
size = n;
}
void Init(int a[])
{
for(int i=0;i<size;i++)
{
Node<T> *s = new Node<T>();
s->data = a[i];
node[i].adj = s;
}
}//将数组中的每一个数字都当作一个开始节点。
void Insert(int start,int end,int a[])
{
Node<T> *p = node[start].adj;
for(int i=start+1;i<size;i++)
{
Node<T> *q = NULL;
while(p!=NULL)
{
q = p;
p = p->link;
}
if(p==NULL && (q->data > a[i]))
{
Node<T> *s = new Node<T>();
s->data = a[i];
q->link = s;
node[start].data++;
}
p=q;
}//依次比较插入节点.
}
void Show()
{
int sum = 0;
int j = 0;
int i =0;
for(;i<size;i++)
{
if(sum<node[i].data)
{
sum = node[i].data;
j = i;
}
}
//得到递减节点数最多的下标.
Node<T> *p = node[j].adj;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->link;
}
cout<<endl;
}
private:
int size;
M_Node<T> *node;
};
int main()
{
int a[]={6,5,4,12,11,10,9,3,2,0,12,3,4,6};
HashList<int> sh(14);
sh.Init(a);
for(int i=0;i<14;i++)
{
sh.Insert(i,14,a);
}
sh.Show();//12 11 10 9 3 2 0为输出结果.
return 0;
}
C++得到一个数组的最大递减数组({3,9,4,5,0}得到结果是{9,4,0})
最新推荐文章于 2024-10-15 12:50:49 发布
本文介绍了一种使用哈希表和链表相结合的数据结构——哈希列表。该结构用于存储一系列递减的整数,并通过特定算法实现高效插入与查找。文章详细展示了如何创建哈希列表类、初始化节点、插入元素及展示最终结果。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
ACE-Step
音乐合成
ACE-Step
ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言
494

被折叠的 条评论
为什么被折叠?



