#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})
最新推荐文章于 2022-09-20 11:30:13 发布