94建中資訊科校內培訓 CK326 馮俊菘
基礎資料結構
投影片網址
台大資工系 劉邦鋒教授 上課投影片
http://www.csie.ntu.edu.tw/~pangfeng/C2002/slides/C_chap12.ppt
大綱
linked list stack
push pop queue
insert remove
tree
binary tree
binary search tree tree traversal
preorder traversal inorder traversal postorder traversal
補充
C++ STL(Standard Template Library, 標準模板庫)
C++提供了STL這樣的泛型(generic types)標準函式庫,十分方便!當然
STL也是個博大精深的東西,這裡只簡單介紹一些用法。
STACK
首先,需要 #include<stack> 。
為了方便起見,加上using namespace std; 這行。
宣告方法:stack<資料型態> 名稱 ; 。這裡的資料型態可以是基本的資 料型態(如int、double…)或是任何已經宣告過的struct或class。
以下簡介幾個STL的stack提供的操作:
empty()
判斷這個stack是否為空。不需要參數,傳回0(false)或1(true)。
size()
計算這個stack內元素各數。不需要參數。
push()
將一個元素放到stack的最上方。需要傳入這個元素。
top()
傳回這個stack的第一個元素(最上方的)。呼叫此函式前要確定
stack不為空。
pop()
移除stack最上方的元素。呼叫此函式前要確定stack不為空。這個函
式不會傳回任何東西,如果要處理被移除掉的元素,請使用top()。
QUEUE
如同stack,需要 #include<queue> 。
為了方便起見,加上using namespace std; 這行。
宣告方法:queue<資料型態> 名稱 ; 。這裡的資料型態跟stack一樣,
94建中資訊科校內培訓 CK326 馮俊菘
可以是基本的資料型態(如int、double…)或是任何已經宣告過的 struct或class。
以下簡介幾個STL的queue提供的操作:
empty()
判斷這個queue是否為空。不需要參數,傳回0(false)或1(true)。
size()
計算這個queue內元素各數。不需要參數。
push()
將一個元素放到queue的最後面。需要傳入這個元素。
front()
傳回這個queue最前面的元素。呼叫此函式前要確定queue不為空。
back()
傳回這個queue最後面的元素。呼叫此函式前要確定queue不為空。
pop()
移除queue最前面的元素。呼叫此函式前要確定queue不為空。跟
stack一樣,這個函式不會傳回任何東西。如果要處理被移除掉的元素
請使用front()。
關於STL
STL還有很多好用的東西,請參考 http://www.sgi.com/tech/stl/ 上面會有詳 盡的解說。當然,人不能因為有了車子,就不學走路;同樣的,不能因為有了 STL,就不親自練習實作這些資料結構。通常自己寫出來的東西,還是比較符 合自己的需要!
練習題
USACO (http://train.usaco.org) 這是美國的資訊奥林匹亞訓練網站。裡面的題目 有按照難度排序過,也穿插著一些教學文件。這個網站有online-judge系統,
而且會把你的程式答錯的那組測資給你,讓你更容易debug。整體而言是頗為 實 用 的 訓 練 網 站 。 這 個 網 站 有 簡 體 版 的 翻 譯 , http://wzioi.wzms.com/usaco/。
ACM (http://acm.uva.es/p) ACM是大學生的程式競賽,而這個網站提供了歷屆 考古題(包括地區性的和全世界的決賽題目)。這個網站也有online-judge系 統,但是它只會告訴你對或錯。這個網站的題目有正體中文的翻譯(但是不完 全),Lucky貓的ACM園地http://www2.dmhs.kh.edu.tw/,這是一個雄 中老師架的網站。
跟這次講的相關的題目有 ACM 442. 483. 514. 727. 10700. …