数组(四)

一个简单的单链表程序实现:

#include <iostream>
using namespace std;

class CAT
{
public:
    CAT() 
{ itsAge = 1; }
    CAT(
int age) { itsAge = age; }
    
~CAT() {}
    
int GetAge() const return itsAge; }
private:
    
int itsAge;
}
;

// manages list, orders by cat's age.
class Node
{
public:
    Node(CAT
*);
    
~Node();
    
void SetNext (Node* node) { itsNext = node; }
    Node
* GetNext() const return itsNext; }
    CAT
* GetCat() const return itsCat; }
    
void Insert(Node*);
    
void Display();

private:
    CAT 
*itsCat;
    Node
* itsNext;
}
;


///////////////////////////////////////////////////////
// 实现部分

Node::Node(CAT
* pCat) : 
    itsCat(pCat),
    itsNext(
0)
    
{}

Node::
~Node() {
    cout 
<< "Deleting node\n";
    delete itsCat;
    itsCat 
= 0;
    delete itsNext;
    itsNext 
= 0;
}


void Node::Insert(Node* newNode) {
    
if (!itsNext)
        itsNext 
= newNode;
    
else {
        
int NextCatsAge = itsNext->GetCat()->GetAge();
        
int NewAge = newNode->GetCat()->GetAge();
        
int ThisNodeAge = itsCat->GetAge();

        
if (NewAge > ThisNodeAge && NewAge < NextCatsAge) {
            newNode
->SetNext(itsNext);
            itsNext 
= newNode;
        }

        
else
            itsNext
->Insert(newNode);
    }

}


void Node::Display() {
    
if (itsCat->GetAge() > 0)
        cout 
<< "My Cat is " << itsCat->GetAge() << " years old\n";
    
if (itsNext)
        itsNext
->Display();
}



int main(int argc, char *argv[])
{
    Node
* pNode = 0;
    CAT
* pCat = new CAT(0);
    
int age;

    Node
* pHead = new Node(pCat);

    
while(1{
        cout 
<< "New Cat's age? (0 to quit):";
        cin 
>> age;
        
if (!age)
            
break;
        pCat 
= new CAT(age);
        pNode 
= new Node(pCat);
        pHead
->Insert(pNode);
    }

    pHead
->Display();
    delete pHead;
    cout 
<< "Exiting\n\n";
     
    
return 0;
}

posted on 2005-04-28 11:44  NeilChen  阅读(417)  评论(0编辑  收藏  举报

导航