推 gingkoginkgo:太感謝了Q口Q 我需要的就是這個!! 03/28 00:50
※ 引述《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