主题:谁写过箱子排序,
地平线
[专家分:480] 发布于 2006-12-04 16:29:00
求箱子排序代码!!!!!!!!!!!!! c++语言 用类写的
回复列表 (共8个回复)
沙发
lszh [专家分:320] 发布于 2006-12-05 09:41:00
你自己不会写吗?
板凳
地平线 [专家分:480] 发布于 2006-12-05 20:53:00
在做,没做出,设计类 真难
很头疼
3 楼
hqin6 [专家分:140] 发布于 2006-12-07 02:22:00
Data Structures,Algorithms,and Applications in c++
这本书里有。这是我们教科书,源代码全有,你去看看就行。
4 楼
地平线 [专家分:480] 发布于 2006-12-07 22:01:00
你难道就 只看看代码,而不自己写吗?
强烈建议 写了 发上来吧!
5 楼
hqin6 [专家分:140] 发布于 2006-12-08 00:42:00
我写了一个,你看行不行?
//******************
Node.h
template<class T>
class Node
{
friend ostream&operator<<(ostream&,const Node &);
public:
int operator!=(Node x)const
{
return(score!=x.score||name[0]!=x.name[0]);
}
operator int()const{return score;}
protected:
private:
int score;
char *name;
};
ostream&operator<<(ostream&out,const Node& x)
{
out<<x.score<<' '<<x.name[0]<<' ';
return out;
}
(待续)
6 楼
hqin6 [专家分:140] 发布于 2006-12-08 00:48:00
(接上面)
//*********************************
Chain.h
#include <iostream>
using namespace std;
template<class T> class Chain;
template<class T>
class ChainNode
{
friend class Chain<T>;
private:
T data;
ChainNode<T> *link;
};
template<class T>
class Chain{
public:
Chain(){first=0;}
~Chain();
void InPut(); Chain<T>&Insert(int k,const T&x);
void Output(ostream&out)const;
void BinSort();
private:
ChainNode<T> *first;
T max;
};
template<class T>
void Chain<T>::InPut()
{
cout<<"请输入你要排序的数个数:\n";
int len=0;
cin>>len;
cout<<"请输入你要排序的数:\n";
T element;
max=0;
for (int i=1;i<=len;i++)
{
cin>>element;
if (max<element)
{
max=element;
}
Insert(i-1,element);
}
}
template<class T>
Chain<T>::~Chain()
{
ChainNode<T>*next;
while (first)
{
next=first->link;
delete first;
first=next;
}
}
template<class T>
void Chain<T>::BinSort()//range----箱子个数
{
int b;
ChainNode<T>**bottom,**top;
bottom=new ChainNode<T>*[max+1];
top=new ChainNode<T>*[max+1];
for(b=0;b<=max;b++)
bottom[b]=0;
for(;first;first=first->link)
{
b=first->data;
if (bottom[b])
{
top[b]->link=first;
top[b]=first;
}
else bottom[b]=top[b]=first;
}
ChainNode<T>*y=0;
for(b=0;b<=max;b++)
if(bottom[b])
{
if (y)
{
y->link=bottom[b];
}
else first=bottom[b];
y=top[b];
}
if (y)
{
y->link=0;
}
delete []bottom;
delete []top;
}
template<class T>
void Chain<T>::Output(ostream&out)const
{
ChainNode<T>*current;
for(current=first;current;current=current->link)
out<<current->data<<" ";
}
template<class T>
ostream& operator<<(ostream&out,const Chain<T>&x)
{
x.Output(out);
return out;
}
template<class T>
Chain<T>&Chain<T>::Insert(int k,const T&x)
{
if(k<0) cout<<"error!"<<endl;
ChainNode<T>*p=first;
for(int index=1;index<k&&p;index++)
p=p->link;
if(k>0&&!p) cout<<"error!"<<endl;
ChainNode<T>*y=new ChainNode<T>;
y->data=x;
if(k)
{
y->link=p->link;
p->link=y;
}
else
{
y->link=first;
first=y;
}
//if(!y->link)last=y;
return *this;
}
//**************************
main.cpp
#include "Chain.h"
void main()
{
Chain<int> mychain;
mychain.InPut();
mychain.BinSort();
cout<<mychain;
}
7 楼
hqin6 [专家分:140] 发布于 2006-12-08 00:53:00
当然,我是凭自己理解写的,不知道符不符合要求。
8 楼
地平线 [专家分:480] 发布于 2006-12-08 08:51:00
非常感谢!!
我来回复