代碼:
#include <iostream>
using namespace std;
class Student //結點類
{
public:
Student(int n,double s):num(n), score(s), next(NULL) {}
~Student()
{
if(!next)
delete next;
next=NULL;
}
Student *next; //指向下一個結點
int num;
double score;
};
class MyList //鏈表類,其中的成員是學生
{
public:
MyList() { head=NULL; }
MyList(int n,double s); //以Student(n,s)作爲單結點的鏈表
~MyList();
int display(); //輸出鏈表,返回值爲鏈表中的結點數
void insert(int n,double s); //插入:將Student(n,s)結點插入鏈表,該結點作爲第一個結點
void append(int n,double s); //追加:將Student(n,s)結點插入鏈表,該結點作爲最後一個結點
void cat(MyList &il); //將鏈表il連接到當前對象的後面
int length(); //返回鏈表中的結點數(另一種處理,可以將結點數,作爲一個數據成員)
private:
Student *head; //鏈表的頭結點
};
//以下爲類成員函數的定義
MyList::MyList(int n,double s)
{
head=new Student(n,s);
}
MyList::~MyList()
{
Student *p=head, *q;
while (p != NULL)
{
q = p;
p = p->next;
delete q;
}
head = NULL;
}
int MyList::display()
{
if(head==NULL)
{
cout<<"empty\n";
return 0;
}
int cnt=0;
Student *pt=head;
while(pt)
{
++cnt;
cout<<pt->num<<", "<<pt->score<<endl;
pt=pt->next;
}
return cnt;
}
void MyList::insert(int n, double s)
{
Student * pt=new Student(n,s);
pt->next =head;
head=pt;
}
void MyList::append(int n,double s)
{
Student * pt=new Student(n,s);
if(head==NULL)
head=pt;
else
{
Student *pts=head;
Student *pte=pts->next;
while(pte)
{
pts=pte;
pte=pts->next;
}
pts->next=pt;
}
}
void MyList::cat(MyList& il)
{
Student *pt=il.head;
while(pt)
{
append(pt->num,pt->score);
pt=pt->next;
}
}
int MyList::length()
{
int cnt=0;
Student *pt=head;
while(pt)
{
++cnt;
pt=pt->next ;
}
return cnt;
}
//測試函數
int main()
{
int n;
double s;
MyList head1;
cout<<"input head1: "<<endl; //輸入head1鏈表
for(int i=0; i<3; i++)
{
cin>>n>>s;
head1.insert(n,s); //通過“插入”的方式
}
cout<<"head1: "<<endl; //輸出head1
head1.display();
MyList head2(1001,98.4); //建立head2鏈表
head2.append(1002,73.5); //通過“追加”的方式增加結點
head2.append(1003,92.8);
head2.append(1004,99.7);
cout<<"head2: "<<endl; //輸出head2
head2.display();
head2.cat(head1); //把head1追加到head2後面
cout<<"length of head2 after cat: "<<head2.length()<<endl;
cout<<"head2 after cat: "<<endl; //顯示追加後的結果
head2.display();
return 0;
}
運行結果:
學習心得:
感覺寫起來比較費勁,是看着答案纔出的最後結果,很多地方自己都想不起來怎麼寫了,看來不復習真的忘得很快。