Back
[listmenu menu="資料結構"] [pagelist child_of="238" depth="2"]

【課堂資源】

  1. C# Algorithms and Data Structures

課堂用編譯器軟體下載(微軟免費版本,安裝過程):

Visual Studio Express 2010 中文版 ISO下載 (1.8 GB) 本課程FB社團

Syllabus

期末考試課程簡介教學目標成績表指定用書參考用書/資料評分方法

題庫:1.下載  2.有解說版本下載

範圍第三章至第六章最大堆積樹、最小堆積樹。(max-min heap不考)

期末考試型態:線上考試,題型:選擇50題。

本課程「資料結構」在於教導學生應用程式裏的資料切割與組成方式,學習與分析這些資料的分分合合過程,撰寫相應的處理程序來有效率地操作這些資料,以解決一個特定的問題,並且,經由問題的切割分別發展子問題的解決方法,再將組合成一個完整的問題解決方法與程序,換言之,整個課程也將學習問題的演繹與歸納方法,透過課程來學習如何用程式來發展高效率的問題的解決方法。
  • 學習理解資料結構概念
  • 學習演算法基礎
  • 學習理解陣列、串列、堆疊與佇列及其應用
  • 學習理解樹狀結構及其應用
  • 學習理解圖形結構及其應用
  • 學習理解排序及其應用
  • 學習理解搜尋及其應用
動畫圖解資料結構:使用C#,李春雄,全華圖書 7f7aaafe-aa7e-487a-91e3-be1c9e4d076d
  • 平常成績(作業、小考等) 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. C#-流程控制
  2. C# 重複結構
  3. TextBox的使用
本週作業: 完成台電電費計算程式 taiwanelectricityfare 台電非時間電價表: %e5%8f%b0%e9%9b%bb-%e9%9d%9e%e6%99%82%e9%96%93%e9%9b%bb%e5%83%b9 作業繳交方式: 1.安裝螢幕錄製軟體(oCam、powerCam或其他),錄製作業製作過程及執行畫面,為了要識別是否為個人的作業,參考上面畫面,一開始就將自己的學號及學號設計放在畫面上,再做後面的動作。 2.將作業錄影檔上傳至Youtube或Vimeo等免費影音平台。 3.將作業錄影檔連結填到資料結構的智慧大師上 e-learninghomework
  • 作業-選擇結構 (本週程式作業 將此連結裏的4個程式作業,以上週的方式進行,作業錄影連結貼到智慧大師上。)

  • electricity-2

 .第一章 資料結構概論 投影片 

【期中考試題庫:】

【研究資源】給沒有學術資源又想做研究的人:Sci-Hub: removing barriers in the way of science

The first pirate website in the world to …

0 comments

未來之星-菁英培育計畫

未來之星菁英培育計畫,採用國際大廠線上開放式課程,舉辦北中南區技術專家社群聚會, …

0 comments

一個大家都不願意follow的回覆審稿者指南 – Errant Science

Despite my prolific blog output, I manag …

0 comments

白宮:人工智慧領域,中國的「論文數量、質量」都超越美國 | 名家 | 三立新聞網 SETN.COM

如果你是科技癡、科技狂,肯定也發現了一件事:現在幾乎所有的軟體公司,都在發展「人 …

0 comments

美國大學如何招攬頂尖人才:我在懷俄明大學當新聘教師委員的經驗 – 報導者

徵聘委員的角色有點像星探,不是高高在上要別人去討好或跪求,反而要跪求最佳人才。 …

0 comments

大学生自学网_我要自学网视频教程

大学生自学网_我要自学网视频教程,提供:经管营销、电气电子、计算机、机械土木、农 …

0 comments

 Infographic: 資料科學與分析的資料視覺化工具 / Data Visualization Tools For Data scientists & analysts 

Here’s an infographic which displays mos …

0 comments

富國實驗室專題生-完全求生手冊

本文有感於我實驗室裏越來越多同學在學長姐不當的經驗傳授下,總以為專題混混就可以畢 …

0 comments

LeetCode簡中版 – 成為超級軟體寫手的刷題網站

备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 I …

0 comments
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 再次複習(程式碼)

本週的作業:

一、請回答堆疊、佇例與鏈結串列的特性,可應用解決生活上的何種問題? 二、程式作業,輸入不定數量的數字,由大到小列印出來。(錄影連結請至智慧大師填)

二元樹、堆積樹:投影片(續上週)

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

發表迴響