精華區beta NTUE-CS100 關於我們 聯絡資訊
※ 引述《gingkoginkgo (人中拉拉!)》之銘言: : ※ 引述《yantchen (球童Yanting)》之銘言: : : node a,b,c; // 有三個節點a,b,c : : node* p; // 指標 p : : p=&a; // p 指向 a : : 這要有完整程式才知道他在幹麻 : : 鏈結串列好像是大二資料結構的東西啊@@" : node本身就是像int一樣的資料型別(型態?)嗎? : 還是說他還有其他的功用? node 在標準的 C++ 裡面不存在喔 要用 class 自己定義 : : 我們課本上的模型: : : class node{ : : int data; : : node* link; : : } : : data是放資料的地方,link指向下一個節點 : : 假設建立一個鏈結串列 a1=1, a3=3, a4=5 : : node a1,a3,a4; : : a1.data=1; : : a1.link=&a3; : : a3.data=3; : : a3.link=&a4; : : a4.data=5; : : a4.link=null; // 接地 : : 插入 a2=4 到 a1 和 a3 中間 : : node a2; : : a2.data=4; : : a2.link=a1.link; : : a1.link=&a2; : : ( 把a2插在a1跟a3中間 所以本來a1接到a3 現在改成 a2接到a3 ; a1接到a2 ) : : 刪除 a3 : : a2.link=a3.link; : : ( 刪除a3 原本a3前面是a2 後面是a4 所以把a2接到a4即可 ) : 那 所謂的heap(head?)是什麼呢? : 今天上課看到老師似乎有宣告了出這個鬼O_O? : 就我那一天只要一碗飯一瓢水的大腦 理解出來是這樣Orz : 每個data被存放的記憶體位置不同 但是我們在讀取時必須要照順序 : 所以需要利用指標來標記 : 記 憶 體 位 置 非 連 續 : heap(?) A1 B2 C3 D4 E5 : ▔▔▔▔ ▔▔▔▔ ▔▔▔▔ ▔▔▔▔ ▔▔▔▔ ▔▔▔▔ : 我是空的 data01 data02 data03 data04 null : 沒資料 ↘ ↑ ↘ ↑ : 指標L1 指標L2 heap是一種父親一定比小孩大或小的complete binary tree link list 裡面只向第一個項目的指標叫做 head 用箭頭是我們示意的表示法 實際上電腦記憶體裡面長這個樣子 instance | head a1 a2 a3 a4 -------------------------------------------- address | 0x12 0x18 0x23 0x11 0x56 | data | null 1 3 2 7 | link | 0x18 0x23 0x11 0x56 null 只要有head指向第一個資料 就可以利用link找到下一個資料 另外語法的部份 C++裡面 int a; // a 是 int 型態的變數 mystack b; // b 是 mystack 型態的變數 int* c; int *c; // c 是 指標變數 指向 int 型態的變數 *號兩個位置都OK mystack* d;// d 是 指摽變數 指向 mystack 型態的變數 指標變數的用法: c=&a; // &a代表a的位址(例如0x8793) c是指標 所以裡面存的是位址 e=*c; // *c代表c這個位址裡面的資料 因為c指向a 所以 e 會得到 a 的數值 假設class mystack的定義如下 class mystack{ int data; mystack* link; } b.data=10; b.link=&e; d->data=15; d->link=&b; class裡面定義的屬性 一般變數用.來存取 例如上面的b.data 指標變數用->來存取 例如上面的d->data : 就概念來講 電腦讀完data01後 接著找的是指標L1 而L1本身是紀錄data02的位置 : 就可以讀取到data02 後面就一直跟著指標走到null : 有錯請用力鞭<(_ _)> : 不過 還是有不知道該怎麼打的問題 : 問題(a).和-> 兩個差在那裡? 要用在哪裡?(因為像老師在黑板上用的是->而非.) : (b)如果是三個data還好 不過如果是50個的話 我猜就會用迴圈來寫了 : 不過要怎麼寫?(建立一個陣列去存指標嗎? ) : 引申的問題有兩個(1)怎麼才能存那堆指標的? 用陣列? stack? : (2)要怎樣才能輸出? : 插入和刪除的部分我還要再研究(嘆) 的確是用迴圈 假設你要找第50筆資料 就用迴圈從head的link往下找50次 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.68.15.221
gingkoginkgo:太感謝了Q口Q 我需要的就是這個!! 03/28 00:50