[C++ ] 有關於很多人搞不懂的作業一
大略看了一下程式
很多人實際上搞不太懂老師是在教什麼
或者不知道在幹嘛
先附上 範例程式碼 應該只有這次會這樣做吧
#include<iostream>
#include<cstdlib> // DEV C++ 5ed以上需要include
using namespace std;
int main(void){
int *array[6]; //用來存位址的指標陣列
for(int i=0;i<6;i++){
array[i]=NULL; //將指標陣列全部接地初始化(NULL為空)
}
int t=0,input=0,count=0;
cout<<"要輸入多少數字?(1~5)\n";
cin>>count; //計算要輸入多少數字
int *pointer=NULL; //用來指向被new出來的空間之指標
for(int i=0;i<count;i++){//依序new出空間並輸入數字
cin>>input; //其實14-16行可以縮成兩行但這樣寫取址取值不熟的人
//應該比較看得懂
pointer=new int; // (要縮減的話就不需要input變數)
*pointer=input; //雖是多此一舉 但是實際上就是把input存進pointer指
//標指向的空間裡
array[t]=pointer; //將位址存入指標陣列
t=input; //這次存的數字指向下一個要到的指標陣列之編號 所
//以要暫存
}
t=0; //純粹需要一個變數代表陣列編號 所以拿之前的變數來
//利用
while(array[t]!=NULL){ //將路徑重新追蹤一遍
cout<<*(array[t])<<" ";
t=*(array[t]);
}
system("pause");
}
因為我覺得老師出的這項作業有點奧妙
經過變形後 雖然有一些串列(Link-list)的精神
但實際上以後也不太可能會這樣用了
因為這就要提到所謂串列(Link-list)跟陣列(Array)的差別
以後大二資料結構會詳細的提到
主要的不同在 陣列(Array) 宣告完後 空間就完全固定了
無法再往上增加 因為陣列是連續的空間 無法利用之後的宣告
把新的空間加在之前的陣列後面
而串列(Link-list)就如字面上的表達
有連接...(好像在說廢話)
實際上就是分散在記憶體各處的空間
利用指標串連 連成一群可以被利用的大空間
舉例說 就像汪洋的大海上有許多破碎的"小島"
每一座島的土地都很少 但所有的島嶼加起來就不得了
如果你想利用所有的土地 就必須造橋(指標)通往其他島嶼(空間)
然後造橋的規則是只能走單向 而且一座島只能從一座橋出去
然後從第一座島嶼(Head) 到最後一座(NULL) 會連成像鍊子一般
就像下圖
第一座島(Head)--這是橋(指標)--> 島嶼(空間) --這是橋(指標)--> 島嶼(NULL)
中間的部分可以一直重複的
只要有需要 就可以隨時加蓋(新增空間)
至於為什麼只能有一座單向的橋 (只有一個指標指向下個空間)
是因為如果蓋太多橋會浪費太多成本(也就是"空間" 指標也是要用空間存的)
在古老吋bit吋金的年代 可不允許人浪費空間
依造上面的資料結構 我們只能從頭(head)進入串列
所以所以要找中間某座島時會比較麻煩
就像有個探險家從第一座島出發
一定要經過很多座島才能到達自己想要的地方
因為橋(指標)就是這樣蓋(指)的
不像陣列可以指定某個編號直接讀取
大致上就像上面所提的
所以陣列方便找尋資料
串列方便增加空間
這個就是他們的優點與限制
如果還是看不太懂我舉的例子的話
可以想像一下
像RO那樣的遊戲
地圖一定有傳送點傳到下一個地圖
地圖就像資料 傳送點就像指標
這樣講不知道有沒有FU 哈哈
各位加油吧!!
--
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄無數次實驗證明▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄ 機會是自己撞出來的 ▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄
________ █████████████████████████▌ █ ██▌
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.127.36.184
→
03/20 11:48, , 1F
03/20 11:48, 1F
推
03/22 06:41, , 2F
03/22 06:41, 2F
→
03/22 06:48, , 3F
03/22 06:48, 3F
推
05/02 21:01, , 4F
05/02 21:01, 4F