NTUE-CS102 板


LINE

hmmmm 我沒朋友,也開不起玩笑。 -- 延續插排的概念...作業五的構成 腦袋還沒空掉的話,鏈結可以當成是一套隨時變動長度的陣列 在基本盤來說,能用鏈結串列來做插排確實會比用陣列來得符合概念 只是實做上複雜性比較高一點,建立過程問題比較多,昨天抓個首項bug玩掉一小時(倒 好...再來先做個接下來用的表格說明 正確的長度會隨著說明一個一個冒出來,這裡先當做做出十個了 ┌—┬—┬—┬—┬—┬—┬—┬—┬—┬—┐ |0|1|2|3|4|5|6|7|8|9| ←建立順、ID,兩者相同 ├—┼—┼—┼—┼—┼—┼—┼—┼—┼—┤ |0|1|2|3|4|5|6|7|8|9| ←串列內順序 ├—┼—┼—┼—┼—┼—┼—┼—┼—┼—┤ |1|1|2|4|6|8|9|10|80|99| ←分數內容 └—┴—┴—┴—┴—┴—┴—┴—┴—┴—┘ : 類別部分採前文用的名字、內容 -- 先來說明實作法,有其他概念再談hmm 這邊隨意排幾組 ┌—┐ ┌—┐ ┌—┐ ┌—┐ ┌—┐ |0| |3| |1| |2| |4| ├—┤ ├—┤ ├—┤ ├—┤ ├—┤ |0| |1| |2| |3| |4| ├—┤ ├—┤ ├—┤ ├—┤ ├—┤ |1| |3| |6| |8| |9| └—┘ └—┘ └—┘ └—┘ └—┘ 現在假設有第5個、4要插入,就沿著串列順序去找大於4的那一個 確認是順序在2的1比較大,就把5的指標指向1(順序2)、3指向5 (5取代成為第2項、後面的跟著自動會往後退一個順序) 變成是 -- 插入 ↓ ┌—┐ ┌—┐ ┌—┐ ┌—┐ ┌—┐ ┌—┐ |0| |3| |5| |1| |2| |4| ├—┤ ├—┤ ├—┤ ├—┤ ├—┤ ├—┤ |0| |1| |2| |3| |4| |5| ├—┤ ├—┤ ├—┤ ├—┤ ├—┤ ├—┤ |1| |3| |4| |6| |8| |9| └—┘ └—┘ └—┘ └—┘ └—┘ └—┘ 我不想多擠一行寫指向的下一項,所以就請稍微心領神會 每一個指向的下一項就看編號順 -- 首先,在開始時是NULL,只建立幾個aclass *p指標準備 或是你喜歡也能先new個位址給指標 我自己是試著整套用同個邏輯走,都放在迴圈內生成 int main(){ aclass *p,*head,*tmp; } 這裏三個指標,一個用來做運作(p),一個用來指示起始點(head) tmp主要用來記錄前一項的位址,因為p一定會像前面例子跑到2,抓不到前一個1在哪 : 有另外建立前項指標的寫法另論 再來進每次輸入、生成的部份...因為無聊,所以寫成跟陣列的範例一樣沒有最大上限 這裡用while製作 剛進迴圈,一樣先不要管類別部份 我們就先接受id、grade後再研究要幹嘛 while(true){ int id,grade; cin>>id >>grade; } -- 針對第一項輸入沒有前後、內容,當作一個特例處理,在while之前設一個bool標記第一次 其他就照常輸入就好 bool start=true; while(true){ int id,grade; cin>>id >>grade; if (start){ start = false; p = head = new aclass; p->setid(id); p->setgrade(grade); p->setptr(NULL); } else{ } } 然後是之後開始輸入的每一項,都在else內處理 -- 從第二項開始,因為都不確定應該插在哪 因此從頭開始沿著串列比大小,把p跟tmp一起歸零回到第一項 開始沿著過程比大小,找出從哪個地方開始比輸入來得大 尋找要從哪裡插入 else{ p=tmp=head; while (true) { if (grade < p->getgrade()) break; else { tmp=p; if (p->getptr()==NULL) break; p=p->getptr(); } } -- 因為每次都是確定p->getgrade()小於輸入後tmp才變為p 一旦發現有比輸入值來得大的,或是一路沒有比輸入值來得小的數值就跳出 所以整個回圏結束時,tmp的位置一定會剛好是要插入的前一項 : 這部份不懂就多畫幾次圖,搞不懂來問我也無妨...我會看是誰決定怎樣說明 知道要插在哪項之後就很簡單... new個物件給p、把東西裝裝進去就是了 然後替換一下指標指向位址就好 p = new aclass; p->setid(id); p->setgrade(grade); p->setptr(tmp->getptr()); tmp->setptr(p); -- 就這樣...插入結束後就把內容印出來看有沒有問題 p=head; while (true){ cout <<p->getid() <<'\t' <<p->getgrade() <<'\n'; if (p->getptr()==NULL) break; p=p->getptr(); } 嗯...上面這樣算寫完八成左右 殘餘會出現一個bug,在第一項變成新的輸入值時會出錯 會插入到第二項,而不是第一項 為了這點,我是再針對這個特例做處理 在前面偵測要插入在哪的地方多加一點變數判斷 -- 加個bool記錄一下是不是第一項需要換 else{ p=tmp=head; bool first=true; while (true) { if (grade < p->getgrade()) break; else { first=false; tmp=p; if (p->getptr()==NULL) break; p=p->getptr(); } } -- 再來隨著這個判斷 將配置物件內指標指向的地方做一點修改 避免因為first判斷讓程式誤認為只要是first都要擺到第一項前 在判斷式確定應該在前或在後 p = new students; p->setid(id); p->setgrade(grade); if (first && grade<tmp->getgrade()) { p->setptr(tmp); head = p; } else { p->setptr(tmp->getptr()); tmp->setptr(p); } 這樣就算完成....大概吧 -- 完整內容大概就這樣 #include<iostream> using namespace std; class students{ public: int getid(); int getgrade(); students* getptr(); void setid(int ID); void setgrade(int GRADE); void setptr(students *PTR); private: int id; int grade; students *ptr; }; void students::setid(int ID){id=ID;}; void students::setgrade(int GRADE){grade=GRADE;}; void students::setptr(students *PTR){ptr=PTR;}; int students::getid(){return id;}; int students::getgrade(){return grade;}; students* students::getptr(){return ptr;}; int main() { students *p,*head,*tmp; bool start=true; while(true){ int id,grade; cin>>id >>grade; if (start){ p = head = new students; p->setid(id); p->setgrade(grade); p->setptr(NULL); start=false; } else{ p=tmp=head; bool first=true; while (true) { if (grade < p->getgrade()) break; else { first=false; tmp=p; if (p->getptr()==NULL) break; p=p->getptr(); } } p = new students; p->setid(id); p->setgrade(grade); if (first && grade<tmp->getgrade()) { p->setptr(tmp); head = p; } else { p->setptr(tmp->getptr()); tmp->setptr(p); } } p=head; while (true){ cout <<p->getid() <<'\t' <<p->getgrade() <<'\n'; if (p->getptr()==NULL) break; p=p->getptr(); } } } -- 所恐懼的,不是沒有知識的大眾  所憎恨的,不是深沉幽暗的人心 而是自以為是的思考之聲 而是自恃甚高的執法者 所毀滅的,不是溫馨和諧的世界 這是我最後的期許,沒有憤怒、沒有悔恨 而是自欺欺人的夢境 只剩下,渾沌的死亡呼吸                節自 新月神話-弒王者 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.114.76.199
1F:推 CaptainWill:鳳狼幹嘛這麼說... 03/18 00:48
2F:推 Arashinoon:害我突然很好奇到底是發生什麼事情= = 03/18 00:53
3F:推 ip3311:12~34 建立順? 03/18 00:54
4F:→ ip3311: 行 03/18 00:54
5F:→ game0416:建立順序...表示產生的順序(輸入順序) 03/18 00:55
6F:推 yantchen:我的朋友 是鳳娘(握 03/18 00:55
7F:推 CaptainWill:元品跳針= = 03/18 00:56
8F:推 Arashinoon:誰跳針=__= 不就是鳳狼最近文章火藥味很濃 03/18 00:57
9F:推 Arashinoon:我很好奇發生什麼事情霸了 03/18 00:57
10F:噓 dosomethnig:我們是馬吉耶!!! 馬吉PO文 就是要推阿!! 03/18 00:57
11F:→ dosomethnig:準備怒吼了媽?? 沒關係 你問小胖我睡覺都帶耳塞 03/18 00:58
12F:推 suan710:看來當事者出面了.. 03/18 00:58
13F:→ dosomethnig:我們是馬吉耶 03/18 00:59
14F:→ Arashinoon:所以到底是發生什麼大事可以讓鳳狼這麼生氣?? 03/18 00:59
15F:→ Arashinoon:  ̄ ̄ 03/18 01:00
16F:→ suan710:請一哥說明: 03/18 01:00
17F:推 CaptainWill:一哥表示: 03/18 01:01
18F:噓 dosomethnig:ㄜ...我按錯了 我要按1推文的 03/18 01:01
19F:→ dosomethnig:誤會一場 等我睡醒 再幫他推回來 03/18 01:01
20F:推 suan710:看來誤會大囉 揪竟會怎麼樣呢? 讓我們繼續看下去 03/18 01:03
21F:推 Arashinoon:說好的資科向心力呢 快GG了 03/18 01:05
22F:推 CaptainWill:一哥只是開玩笑,別認真 03/18 01:05
23F:推 Arashinoon:我幫一哥推回來一個 03/18 01:07
24F:→ CaptainWill:一哥表示 03/18 01:07
25F:→ s86186654418: 好像在看連載唷 03/18 01:14
26F:推 suan710: 什麼時候出下一集 03/18 01:15
27F:→ Arashinoon: 下集待續 03/18 01:16
28F:→ CaptainWill:你們這群顧吃雞排不幫忙解決事情的人 囧 03/18 01:18
29F:→ Arashinoon:樓上別這樣 我也有幫忙 03/18 01:18
30F:→ s86186654418:coming soon 03/18 01:21
31F:→ CaptainWill: 是說我想吃宵夜了... 03/18 01:23
32F:推 suan710:遺憾的是宿舍出不去派克又關了.. 03/18 01:25
33F:→ Arashinoon:看到上面的雞排我肚子餓了 03/18 01:29
34F:→ CaptainWill:雞排 珍奶 茄汁牛肉麵 味噌拉麵 麻辣鍋 臭豆腐....... 03/18 01:30
35F:→ Arashinoon:幹= = 03/18 01:30
36F:→ CaptainWill:幹很餓.... 03/18 01:31
37F:→ CaptainWill:http://tinyurl.com/yb4ozhx 03/18 01:36
38F:→ Arashinoon:幹 樓上恐怖連結都不用說的喔 03/18 01:37
39F:→ CaptainWill:說了你會點?! 03/18 01:37
40F:→ CaptainWill:http://tinyurl.com/ydc65nf 幹...真的受不了 03/18 01:38
41F:→ Genya0:呵呵呵 03/18 01:40
42F:→ CaptainWill:呵呵 03/18 01:41
43F:→ Arashinoon:我沒存糧了 好餓.... 03/18 01:41
44F:→ CaptainWill:http://tinyurl.com/ybusxy4 阿辣試試這個 03/18 01:42
45F:→ Arashinoon:草尼馬的魷魚+美乃滋 03/18 01:42
46F:推 suan710:存糧大拍賣!! 03/18 01:43
47F:→ Arashinoon:樓上有啥 說來聽聽 幹還是算了 會更餓 03/18 01:43
48F:推 pk873: ╴╴╴╴ ▌ 03/18 01:44
49F:→ pk873: /∵ ∴ ∵\ \ ̄ ̄ ̄ ̄ ̄ ̄/ 03/18 01:44
50F:→ pk873: /∴ ∵ ∴ ∵ \ \ / 03/18 01:44
51F:→ pk873: ███████▋ \ / 03/18 01:44
52F:→ pk873: \ ∴ ∵ ∴ ∵/ \ / 03/18 01:44
53F:→ pk873: \∵ ∴ ∵/ \____/ 03/18 01:44
54F:→ pk873:  ̄ ̄ ̄ ̄ 03/18 01:44
55F:→ pk873:頭痛...睡覺去... 03/18 01:44
56F:→ suan710:泡麵X N 糖果 口糧 應有盡有喔 揪咪 03/18 01:45
57F:→ CaptainWill:http://tinyurl.com/y9bnmpg 這張史上最恐怖(無膽勿試 03/18 01:45
58F:→ suan710:算了真的要睡了...8點記得叫我 03/18 01:46
59F:→ CaptainWill:這樣睡得著嗎 阿辣? 03/18 01:46
60F:→ Arashinoon:阿花洗個澡?? 還是洗過了 03/18 01:46
61F:→ CaptainWill:我下午從陽明山觀光回來的時候洗過了-ˇ- 03/18 01:47
62F:→ CaptainWill:我要用睡眠來克服肌餓了...掰 03/18 01:49
63F:→ Arashinoon:掰... 03/18 01:51
64F:→ CaptainWill: (講得自己很像難民= = 03/18 01:53
65F:推 pig456654: ◢████████████◤▏ 03/18 10:30
66F:→ pig456654: ◢◤____◢◤____◢◤____◢◤╱ 03/18 10:30
67F:→ pig456654: ◢◤╱ ◢◤╱ ◢◤╱ ◢◤╱ 03/18 10:30
68F:→ pig456654: ◢████◤╱ ◢████◤╱ 03/18 10:30
69F:→ pig456654: ◢◤▏ ▕╱ ▕______◢◤╱ 03/18 10:30
70F:→ pig456654: ◢◤╱ ̄ ̄ ̄ ̄ ◢◤╱ 03/18 10:30
71F:→ pig456654: ◢◤╱ ◢████◤▏ ◢◤╱ 03/18 10:30
72F:→ pig456654: ◢◤╱ ◢◤____◢◤╱ ◢◤╱ 03/18 10:30
73F:→ pig456654: ◢◤╱ ◢◤╱ ◢◤╱ ◢◤╱ 03/18 10:30
74F:→ pig456654:◢████████████◤╱ 03/18 10:30
75F:→ pig456654:▏ ▕╱ 03/18 10:30
76F:→ pig456654: ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 03/18 10:30
小修個BUG ※ 編輯: game0416 來自: 120.127.47.93 (03/22 10:15)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP