作者yantchen (球童Yanting)
看板NTUE-CS101
标题Re: [课业] 串列
时间Thu Apr 2 17:11:50 2009
其实不用想的那麽复杂
现在程式要做的事情有
1. 输入资料
2. 产生节点
3. 找到节点在串列里面的位置
4. 插进去
上礼拜是把 3 简化成 所有新的节点的位置都是 head
现在需要思考一下 怎麽找到新的节点 他的後一个跟前一个
这里先把这三个点取个名字
新的这个点叫做 p
他後面那个点(比他大的)叫做 q1
他前面那个点(比他小的)叫做 q2
( p, q1, q2 都是 指标 )
为什麽需要q1和q2?
先看第四步你就知道了
在串列里面 不管你要擦头 擦屁 还是擦中间
一定要有的步骤是
把前面一个人屁股的那条线接到你头上
把你屁股上的线贴到後面那个人脸上
写成程式就是
q2->setNext(p);
p->setNext(q1);
再回来想 3 怎麽写
找到串列里面的位置
想想我上礼拜有跟你们说把串列印出来的方法(走得很匆忙那次)
q=head;
while(q!=NULL)
{
cout<<q->getNo();
q=q->getNext();
}
先解释一下
q=head; // 从头开始
while(q!=NULL) // 如果 q 不是接地 ( 没有东西了 )
cout // 把 q 印出来
q=q->getNext(); // getNext()是传回下一个人的位址 ( 你的函数名字可能不一样 )
// 所以 q 会指向他下一个人
OK 把 cout 拿掉然後改一下这个就可以用在 3 了
q1=head; // 用来存 p 的下一个 ( 比他大的那个 ) 人的指标
q2=NULL; // 用来存 p 的前一个 ( 比他小的那个 ) 人的指标
while(q1!=NULL && q1->getNo() < p->getNo() ){
q2=q1;
q1=q1->getNext();
}
// 回圈里面一样 q1 指向 q1 的下一个
// 先看 while 里面条件 如果 q1 比 p 的数字小的话 就代表还要往下找
// 这时 先把原本的 q1 存到 q2 ( 等下举例说明 )
// 然後 q1 指到他下面的那个人
说明一下为什麽要 q2=q1
假设你的串列已经有
1 5 7
要把 6 插进来
一开始 q1=1, q2=null ; 1 < 6 所以要继续找
q1=5, q2=刚才的q1=1 ; 5 < 6 继续往下
q1=7, q2=刚才的q1=5 ; 7 > 6 所以这就是他的位置
这时 从while回圈里面跳出来
把 5 ( q2 ) 接到 6 ( p )
把 6 ( p ) 接到 7 ( q1 )
-- 解释部份到这里结束 --
完整程式码参考
http://0rz.tw/io1uG
这个是示意版
只有串列的部份
至於每个节点内的资料我只有设定作号
老师要求的其他资料就自己试着加上去吧
有问题在msn问我
掰XD
※ 引述《gingkoginkgo (人中拉拉!)》之铭言:
: ※ 引述《didi12252001 (撒娇)》之铭言:
: : 有谁把程式写出来的
: : 今天王老大的作业
: : 我卡题了
: : 哪个写的出来的交一下吧
: 大致上思考流程如下 //这是当年的我写的 说不定有错 不过给个方向就是
: 插头
: 1.产生新node 指定data
: 2.新node连结到head
: 3.head=新node
: 插屁屁
: 情形(1)head=NULL时 直接连上去
: 情形(2)head!=NULL时
: 1.p=head //make sure head exist
: 2.利用P移动到下一个(next)直到next=NULL
: 从小到大
: 1.先决定要3->5->6 还是9->8->2
: 2.考虑三种情况:插头.插屁屁或是插中间
: 第一次 head->□ 进for洄圈
: node* temp=new node;
: node*p = new node;
: 上面这串的结果是 temp→□(temp指到一个新的)
: p→□(p也是指到一个新的)
: temp=head->next; 这串的话,就是让Temp指到NULL,
: 因为你head只到的物件,
: 并没有串到任何物件然後又让
: p=temp->next;
: temp本身就没指到东西了,又让p指过去,
: 所以还是没任何意义到最後就变成
: head→□ □ □ 成功只有head,
: 剩下的两个就失连了
: 其实也可以爬爬100级的版? 看当年学长我(?)是怎麽跌跌撞撞到头很痛XD
: 不过现在仍旧头痛中就是
: 其实作法有很多种
: 也可以说你就先生出个空的头 这个头不放任何资料 只是指向下一个
: 你就会意外的发现好像有比较简单喽....
: 其实个人觉得Link list画图很重要
: 会把架构和你要做的事清楚的看明白
: 如果你能嚐试讲出你每一步再做什麽 那大概就OK了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.68.15.209
1F:推 rockmyangel:真的棒 我可能快要 稍微懂了 04/02 20:49
2F:→ rockmyangel:越来越难了欸 大家努力阿 04/02 20:49
3F:推 didi12252001:我有完整版的 包然有的没的标准 还包含英英注解 04/03 00:00
4F:推 didi12252001:要先上传的找我拿档案吧 04/03 00:00