现在的位置: 首页 > 综合 > 正文

IntSetList.cpp

2013年02月14日 ⁄ 综合 ⁄ 共 1139字 ⁄ 字号 评论关闭

E:\myprj\mylib\IntSetList.h

class IntSetList
{
public:
	IntSetList(int maxelements = 0, int maxval = 0);
	~IntSetList();
	int size(){ return n; }
	void insert(int t);
	void report(int * v);
private:
	int n;
	struct node {
		int val;
		node * next;
		node(int v, node * p) { val = v; next = p;}
	};
	node * head, * sentinel;

	node * rinsert(node * p, int t);
};

E:\myprj\mylib\IntSetList.cpp

#include "IntSetList.h"

IntSetList::IntSetList(int maxelements, int maxval)
{
	sentinel = head = new node(maxval, 0);
	n = 0;
}

IntSetList::~IntSetList()
{
	node * p;
	
	do 
	{
		p = head->next;
		delete head;
		head = p;
	} while (head != sentinel);

	delete head;
}

void IntSetList::insert(int t)
{
	head = rinsert(head, t);
}

void IntSetList::report(int * v)
{
	int j = 0;
	node * p;

	for (p = head; p != sentinel; p = p->next)
	{
		v[j++] = p->val;
	}
}

IntSetList::node * IntSetList::rinsert(node * p, int t)
{
	if (p->val < t)
	{
		p->next = rinsert(p->next, t);
	}
	else if (p->val > t)
	{
		p = new node(t, p);
		n++;
	}

	return p;
}

//////////////////////////////////////////////////////////////////////////
//测试

#include <cstdlib>
#include <iostream>

using namespace std;

static void gensets(int m, int maxval)
{
	int * v = new int[m];
	IntSetList s(m, maxval);
	while(s.size() < m)
	{
		s.insert(rand()%maxval);
	}
	
	s.report(v);
	
	for (int i = 0; i < m; i++)
	{
		cout << v[i] << "\n";
	}
}

void testSetList(void)
{
	gensets(10, 100);
}

抱歉!评论已关闭.