您的位置:首页 > 编程语言 > C语言/C++

C++得到一个数组的最大递减数组({3,9,4,5,0}得到结果是{9,4,0})

2015-05-01 16:08 267 查看
#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>
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐