/* #include <iostream> using namespace std; //定认枚举形常量 enum{small,large, same}; class Date { public: Date(int i):date(i){} ~Date(){} int compare(const Date&); void print(){ cout<<date<<endl;} private: int date; }; int Date::compare(const Date& two) { if(date < two.date) return small; if(date > two.date){ return large; }else{ return same; } } //链表类 class Node { public: Node(){} virtual ~Node(){} virtual Node* insert(Date *one) = 0; //只有拥有一个线纯虚函数的类就是抽像类,所以说Node类是一个抽像类 virtual void print() = 0; private: }; class InterNode:public Node { public: InterNode(Date*one, Node*next); ~InterNode(){ delete Next; delete thisdate;} virtual Node*insert(Date*one); virtual void print(){ thisdate->print(); Next->print(); } private: Date *thisdate; Node *Next; }; InterNode::InterNode(Date*one, Node*next):thisdate(one),Next(next) { } Node*InterNode::insert(Date*one) { int result = thisdate->compare(*one); switch(result){ case same: case large: { InterNode *NodeDate = new InterNode(one,this); return NodeDate; } break; case small: Next = Next->insert(one); return this; break; } return this; //InterNode *NodeDate = new InterNode(one,this); //return NodeDate; } class TailNode:public Node { public: virtual Node*insert(Date*one); virtual void print(){} private: }; Node* TailNode::insert(Date*one) { InterNode *datenode = new InterNode(one, this); return datenode; } class HeadNode:public Node { public: HeadNode(); ~HeadNode(){ delete Next;} virtual Node*insert(Date*one); virtual void print(){ Next->print(); } private: Node *Next; }; Node* HeadNode::insert(Date*one) { Next = Next->insert(one); return this; } HeadNode::HeadNode() { Next = new TailNode; //尾节点指针 } //Label类 class Label { public: Label(); ~Label(){ delete head;} //删除头节点 void insert(Date*one); void printall(){ head->print(); } private: HeadNode *head; //头节点类指向头节点地址,该类我们后面定义 //这个标签包含了一个指向头节点的指针,我们可以通过这个指针找到头节点,HeadNode代表头节点类,该类我们稍候定义,head则是指向头节点的指针,我们用这个指针保存头节点对像的地址,那么就可以通过该地址找到头节点 }; Label::Label() { head = new HeadNode; } //插入函数 void Label::insert(Date *one) { head->insert(one); //插入到头节点的插入函数 } //该类中完成4件事, //1 创建头节点,并用一个指针指向它 //2 利用头节点的插入函数将数据插入到头节点 //3 利用头节的输出函数输出该节点保存的数据 //4 删除头节点 //因为链表是由头节点,中间节点和尾节点组成的,就像足球运动员是由前锋,中锋,后卫,守门员组成的一样,前锋和后卫虽然分工不同,但是都有足球运动员的特征,所以要从足球运动员这个类派生,头节点,中间节点和尾节点分工也不一样,不过有链表的特征,所以也要从链表类派生 int main() { Date *pdate; int val; Label ll; for(;;) { cout<<"什么值? (0为停止): "; cin>>val; if(!val) { break; } pdate = new Date(val); ll.insert(pdate); } ll.printall(); return 0; }*/