程序種有兩個組成部分
test *create()
和 void showl(test *head)
這兩個函數(shù),create是用來創(chuàng)建鏈表的 ,showl是用來顯示鏈表的。
create函數(shù)的返回類型是一個結(jié)構(gòu)體指針,在程序調(diào)用的時候我們用了showl(create());,而不用引用的目的原因是引導指針是一個全局指針變量,我們不能在showl()內(nèi)改變它,因為showl()函數(shù)內(nèi)有一個移動操作head=head->next;,如果是引用的話我們就破壞了head指針的位置,以至于我們再也無法找會首地址的位置了。
下面我們來分解整個程序,以一個初學者的思想來思考整個程序,由淺入深的逐步解釋。
首先,我們寫這個程序,要考慮到由于是一個鏈表結(jié)構(gòu),我們不可能知道它的大小到底是多大,這個問題我們可以用動態(tài)開辟堆內(nèi)存來解決,因為堆內(nèi)存在程序結(jié)束前始終是有效的,不受函數(shù)??臻g生命期的限制,但要注意的是我們必須有一個指針變量來存儲這一鏈狀結(jié)構(gòu)的進入地址,而在函數(shù)內(nèi)部來建立這一指針變量顯然是不合適的,因為函數(shù)一旦退出,這個指針變量也隨之失效,所以我們在程序的開始聲明了一個全局指針變量。來源:www.examda.com
test *head;//創(chuàng)建一個全局的引導進入鏈表的指針
好解決了這兩個問題,我們接下去思考
有輸入就必然有輸出,由于輸出函數(shù)和輸入函數(shù)是相對獨立的,為了不斷測試程序的正確性好調(diào)試我們先寫好輸出函數(shù)和main函數(shù)捏的調(diào)用,創(chuàng)建函數(shù)我們先約定好名為create。
我們先寫出如下的代碼:
#include
using namespace std;
struct test
{
char name[10];
float socre;
test *next;
};
test *head;//創(chuàng)建一個全局的引導進入鏈表的指針
test *create()
{
return head;//返回鏈首指針
}
void showl(test *head)
{
cout<<"鏈首指針:"< <
while(head)//以內(nèi)存指向為null為條件循環(huán)顯示先前輸入的內(nèi)容
{
cout< name<<"|"< socre<
head=head->next;
}
}
void main()
{
showl(create());
cin.get();
cin.get();
}
程序?qū)懙竭@里,基本形態(tài)已經(jīng)出來,輸入和調(diào)用我們已經(jīng)有了。
test *create()
和 void showl(test *head)
這兩個函數(shù),create是用來創(chuàng)建鏈表的 ,showl是用來顯示鏈表的。
create函數(shù)的返回類型是一個結(jié)構(gòu)體指針,在程序調(diào)用的時候我們用了showl(create());,而不用引用的目的原因是引導指針是一個全局指針變量,我們不能在showl()內(nèi)改變它,因為showl()函數(shù)內(nèi)有一個移動操作head=head->next;,如果是引用的話我們就破壞了head指針的位置,以至于我們再也無法找會首地址的位置了。
下面我們來分解整個程序,以一個初學者的思想來思考整個程序,由淺入深的逐步解釋。
首先,我們寫這個程序,要考慮到由于是一個鏈表結(jié)構(gòu),我們不可能知道它的大小到底是多大,這個問題我們可以用動態(tài)開辟堆內(nèi)存來解決,因為堆內(nèi)存在程序結(jié)束前始終是有效的,不受函數(shù)??臻g生命期的限制,但要注意的是我們必須有一個指針變量來存儲這一鏈狀結(jié)構(gòu)的進入地址,而在函數(shù)內(nèi)部來建立這一指針變量顯然是不合適的,因為函數(shù)一旦退出,這個指針變量也隨之失效,所以我們在程序的開始聲明了一個全局指針變量。來源:www.examda.com
test *head;//創(chuàng)建一個全局的引導進入鏈表的指針
好解決了這兩個問題,我們接下去思考
有輸入就必然有輸出,由于輸出函數(shù)和輸入函數(shù)是相對獨立的,為了不斷測試程序的正確性好調(diào)試我們先寫好輸出函數(shù)和main函數(shù)捏的調(diào)用,創(chuàng)建函數(shù)我們先約定好名為create。
我們先寫出如下的代碼:
#include
using namespace std;
struct test
{
char name[10];
float socre;
test *next;
};
test *head;//創(chuàng)建一個全局的引導進入鏈表的指針
test *create()
{
return head;//返回鏈首指針
}
void showl(test *head)
{
cout<<"鏈首指針:"< <
while(head)//以內(nèi)存指向為null為條件循環(huán)顯示先前輸入的內(nèi)容
{
cout< name<<"|"< socre<
head=head->next;
}
}
void main()
{
showl(create());
cin.get();
cin.get();
}
程序?qū)懙竭@里,基本形態(tài)已經(jīng)出來,輸入和調(diào)用我們已經(jīng)有了。