使用C++的继承方式实现一个通用的GList列表类。
要求:
A、 能够对任意类型对象进行管理,包括内建数据类型及自定义类类型的对象(所有类型需要继承自同一个基类);
B、 列表的大小随添加对象的增加而自动增长;
C、 可以在链表的首部,尾部插入数据或指定对象的后面插入;
D、 能够比较列表中对象的大小,可以查找指定对象;
E、 可以删除指定对象;
F、 能够根据对象的比较结果对对象进行排序并打印结果;
这个题出的很好,大家都来看看,是我们要做的项目,但是我太差了,做不出来了,打算选一个简单点的来做,把题拿出来大家讨论哈,要是有会的,请给我讲讲,我会很感激的。
#include <iostream>
using namespace std;
class CObject
{
public:
virtual int CompareTo(CObject& object)=0;
bool operator>(CObject& object);
};
bool CObject::operator >(CObject& object)
{
return CompareTo(object)>0;
}
class CNode
{
friend class LinkedList;
private:
CNode * m_prev;
CNode * m_next;
CObject * m_object;
char Name[10];
char No[10];
public:
CNode(CObject * object=NULL)
{
m_object = object;
m_prev = NULL;
m_next = NULL;
}
};
CInt int_ : public CObject
{
public:
virtual CompareTo( COject &object )
{
Cint *pInt = (Cint*)&object ;
if( m_iData > object->m_iData )
return = 1;
}
private:
int m_iData ;
}
class LinkedList
{
private:
CNode * m_head;
CNode * m_rear;
int m_size;
public:
LinkedList()
{
m_size = 0;
m_head = new CNode();
m_rear = new CNode();
m_head->m_prev = NULL;
m_head->m_next = m_rear;
m_rear->m_prev = m_head;
m_rear->m_next = NULL;
}
下面好像都有错,但是我实在不知道该怎么改了。
void Add_head(char name[],char no[])
{
CNode(name,no);
m_head->next=&node;
m_head=node;
size++;
}
void Add_rear(char name[],char no[])
{
CNode(name,no);
rear->next=&node;
rear=node;
size++;
}
void delete_head()
{
if(size==0)
{ cout<<"链表空"<<endl;
exit(1);
}
head=head->next;
size--;
}
void find(int index)
{ CNode *m_head;
if((index<0)||(index>size))
{ cout<<"结果不存在!"<<endl;
exit(1);
}
for(int i=1;i<index-1;i++)
m_head=m_head->next;
cout<<"你要查找的姓名是:"<<m_head->Name<<endl<<"学号是:"<<m_head->No<<endl;
}
void bublle(int a[],int n) //冒泡排序
{ int i,j,t,temp;
for(i=1;i<=n-1;i++)
{ t=n-1;
for(j=0;j<t-1;j++)
{ if (a[j]>a[j+1])
{ temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
};
void main()
{}