数组(四)
一个简单的单链表程序实现:
#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;
}
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;
}