码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-01 17:28:53      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

#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})

标签:

原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/45419905

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!