作者yantchen (球童Yanting)
看板NTUE-CS100
标题Re: [课业]召唤守护神建中哥Q口Q
时间Fri Mar 28 00:37:44 2008
※ 引述《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
1F:推 gingkoginkgo:太感谢了Q口Q 我需要的就是这个!! 03/28 00:50