【課堂資源】
課堂用編譯器軟體下載(微軟免費版本,安裝過程):
Visual Studio Express 2010 中文版 ISO下載 (1.8 GB) 本課程FB社團Syllabus
期末考試課程簡介教學目標成績表指定用書參考用書/資料評分方法
本課程「資料結構」在於教導學生應用程式裏的資料切割與組成方式,學習與分析這些資料的分分合合過程,撰寫相應的處理程序來有效率地操作這些資料,以解決一個特定的問題,並且,經由問題的切割分別發展子問題的解決方法,再將組合成一個完整的問題解決方法與程序,換言之,整個課程也將學習問題的演繹與歸納方法,透過課程來學習如何用程式來發展高效率的問題的解決方法。
- 學習理解資料結構概念
- 學習演算法基礎
- 學習理解陣列、串列、堆疊與佇列及其應用
- 學習理解樹狀結構及其應用
- 學習理解圖形結構及其應用
- 學習理解排序及其應用
- 學習理解搜尋及其應用
動畫圖解資料結構:使用C#,李春雄,全華圖書
- 資料結構經典範例演示動畫
- Fundamentals of Data Structures in JAVA Horowitz, Shahni & Anderson-Freed
- http://www.csie.ntnu.edu.tw/~u91029/index.html
- 平常成績(作業、小考等) 30%
- 期中考 30%
- 期末(考試與學期作業報告) 40%
各週教學內容與習題資料 Week 1~9
W1 (9/15)W2 (9/22)W3 (9/29)W4(10/6)W5(10/13)W6(10/20)W7 (10/27)W8(11/3)W9(11/10)
中秋節休假 (9/15)
9/22 課程介紹
9/29 資料結構概論
本週作業:
完成台電電費計算程式
台電非時間電價表:
作業繳交方式:
1.安裝螢幕錄製軟體(oCam、powerCam或其他),錄製作業製作過程及執行畫面,為了要識別是否為個人的作業,參考上面畫面,一開始就將自己的學號及學號設計放在畫面上,再做後面的動作。
2.將作業錄影檔上傳至Youtube或Vimeo等免費影音平台。
3.將作業錄影檔連結填到資料結構的智慧大師上
-
作業-選擇結構 (本週程式作業 將此連結裏的4個程式作業,以上週的方式進行,作業錄影連結貼到智慧大師上。)
-
上週作業 - 電費計算器 解答
-
投影片 - 陣列
-
C# 陣列
-
本週作業,完成底下程式:(程式專案下載)
.第一章 資料結構概論 投影片
【期中考試題庫:】
【研究資源】給沒有學術資源又想做研究的人:Sci-Hub: removing barriers in the way of science
The first pirate website in the world to …
白宮:人工智慧領域,中國的「論文數量、質量」都超越美國 | 名家 | 三立新聞網 SETN.COM
如果你是科技癡、科技狂,肯定也發現了一件事:現在幾乎所有的軟體公司,都在發展「人 …
Infographic: 資料科學與分析的資料視覺化工具 / Data Visualization Tools For Data scientists & analysts
Here’s an infographic which displays mos …
Week 9
各週教學內容與習題資料 Week 10~18
W10(11/17)W11(11/24)W12(12/1)W13(12/8)W14(12/15)W15(12/22)W16(12/29)W17W18
講義:【資料結構】陣列
http://www.x.ita.hk.edu.tw/wp/%E3%80%90%E8%B3%87%E6%96%99%E7%B5%90%E6%A7%8B%E3%80%91%E9%99%A3%E5%88%97/
佇列 (本週有課堂小測驗@智慧大師)
第一部份:
Console 命令提示字元(DOS視窗)與Windows視窗 教材文章> 輸出 Console.Write 與 Console.WrieLine 輸入 Console.ReadLine, Console.Read, Console.ReadKey 更進一步的解說,請參考我程式設計課程中第14週的講解:http://x.ita.hk.edu.tw/~wells/wp/教授課程/程式設計/第二部份:
Stack, Queue, LinkedList 再次複習(程式碼)本週的作業:
一、請回答堆疊、佇例與鏈結串列的特性,可應用解決生活上的何種問題? 二、程式作業,輸入不定數量的數字,由大到小列印出來。(錄影連結請至智慧大師填)註:目前最popular的tree相關應用就是XML和 JSON
二元樹、堆積樹:投影片(續上週)
Binary Search Tree(視覺化操作工具)
二元樹範例-1:
using System; class BinaryTree //二元樹類別 { private Node root; //根節點 private int count; //節點計數 public BinaryTree() //建構子 { root = null; count = 0; } public bool isEmpty() //回傳二元樹是否為空? { return root == null; } public void insert(int d) //插入節點 { if (isEmpty()) { root = new Node(d); } else { root.insertData(ref root, d); } count++; } public bool search(int s) //搜尋節點 { return root.search(root, s); } public bool isLeaf() //判斷是否為樹葉節點 { if (!isEmpty()) return root.isLeaf(ref root); return true; } public void display() //顯示整個二元樹 { if (!isEmpty()) root.display(root); } public int Count() //回傳二元樹節點的數量 { return count; } } class Node //節點類別 { private int number; //節點本身的資料 public Node rightLeaf; //節點右節點參考(指標) public Node leftLeaf; //節點左節點參考(指標) public Node(int value) //建構子 { number = value; rightLeaf = null; leftLeaf = null; } public bool isLeaf(ref Node node) //判斷是否為樹葉節點 { return (node.rightLeaf == null && node.leftLeaf == null); } public void insertData(ref Node node, int data) { if (node == null) { node = new Node(data); } else if (node.number < data) { insertData(ref node.rightLeaf, data); } else if (node.number > data) { insertData(ref node.leftLeaf, data); } } public bool search(Node node, int s) //搜尋節點,s為要搜尋的值 { if (node == null) return false; if (node.number == s) { return true; } else if (node.number < s) { return search(node.rightLeaf, s); } else if (node.number > s) { return search(node.leftLeaf, s); } return false; } public void display(Node n) //顯示節點 { if (n == null) return; display(n.leftLeaf); Console.Write(" " + n.number); display(n.rightLeaf); } } class Program { static void Main(string[] args) { BinaryTree b = new BinaryTree(); //建立一個BinaryTree物件,名為b b.insert(1); //插入1到二元樹b,以下略 b.insert(6); b.insert(2); b.insert(4); b.insert(5); b.insert(3); b.display(); //顯示二元樹b Console.ReadKey(); } }
二元搜尋樹範例-2
/* * C# 二元搜尋樹 */ using System; namespace TreeSort { class Node { public int item; public Node leftc; public Node rightc; public void display() { Console.Write("["); Console.Write(item); Console.Write("]"); } } class Tree { public Node root; public Tree() { root = null; } public Node ReturnRoot() { return root; } public void Insert(int id) { Node newNode = new Node(); newNode.item = id; if (root == null) root = newNode; else { Node current = root; Node parent; while (true) { parent = current; if (id < current.item) { current = current.leftc; if (current == null) { parent.leftc = newNode; return; } } else { current = current.rightc; if (current == null) { parent.rightc = newNode; return; } } } } } public void Preorder(Node Root) { if (Root != null) { Console.Write(Root.item + " "); Preorder(Root.leftc); Preorder(Root.rightc); } } public void Inorder(Node Root) { if (Root != null) { Inorder(Root.leftc); Console.Write(Root.item + " "); Inorder(Root.rightc); } } public void Postorder(Node Root) { if (Root != null) { Postorder(Root.leftc); Postorder(Root.rightc); Console.Write(Root.item + " "); } } } class Program { static void Main(string[] args) { Tree theTree = new Tree(); theTree.Insert(20); theTree.Insert(25); theTree.Insert(45); theTree.Insert(15); theTree.Insert(67); theTree.Insert(43); theTree.Insert(80); theTree.Insert(33); theTree.Insert(67); theTree.Insert(99); theTree.Insert(91); Console.WriteLine("中序追蹤: "); theTree.Inorder(theTree.ReturnRoot()); Console.WriteLine(" "); Console.WriteLine(); Console.WriteLine("前序追蹤: "); theTree.Preorder(theTree.ReturnRoot()); Console.WriteLine(" "); Console.WriteLine(); Console.WriteLine("後序追蹤 : "); theTree.Postorder(theTree.ReturnRoot()); Console.WriteLine(" "); Console.ReadLine(); } } }
Week 17
Week 18