1. 程式人生 > >上海交大演算法與資料結構(Data Structures Learning Video)檀曉紅老師資料結構公開課程

上海交大演算法與資料結構(Data Structures Learning Video)檀曉紅老師資料結構公開課程

教材及習題

資料結構(C語言版)嚴蔚敏 吳偉明 清華大學出版社

資料結構題集(C語言版)  嚴蔚敏 吳偉明 清華大學出版社

課程簡介

資料結構是一門專業技術基礎的課程,課程分析,研究計算機加工資料的特徵,資料的邏輯結構,資料的儲存結構,資料涉及的演算法,以及不同特徵資料應用情況。

————————————————————————————————————————————————————

結構化程式 =(演算法)+(資料結構)

面向物件的程式 = (演算法 + 資料結構)

本課程主要內容

  • 線性的資料結構
  • 查詢
  • 排序

                                                                  第一章 緒論

                                                           (本章重點:“資料結構”的基本概念,演算法和演算法設計的要求)

1.1 什麼是資料結構

計算機解決問題的一般步驟

建立數學模型:從具體問題中抽象出來

注:比如說雞兔同籠的問題,先分析這個問題,想到用方程式來解,於是提取x,y為操作物件,用二元一次方程來找到關係,寫出解:的步驟

例子:雞兔共有35個頭,94只腳,問雞兔各有多少隻?
法一
解:設兔有x只,則雞有(35-x)只
4x+2(35-x)=94
4x+70-2x=94
x=12
從而計算出雞數為35-12=23(只)
法二 是二元一次方程法。
解:設雞有x只,兔有y只。
則存在著二元一次方程組的關係式
x+y=35
2x+4y=94
解方程式可知兔子數為y=12則可計算雞數為x=23

數學模型:

  •  數值問題(數學方程)
  • 非數值問題(集合,線性表,樹,圖等)

注:更多的非數值問題無法用數學方程描述

例子1:圖書館書目檢索系統自動化問題

系統中的數學模型:圖書目錄卡片

資料模型:線性的資料結構

例子2:人機對弈問題

資料模型:“樹”型資料結構

每一次的佈局都會由這一個點,從而產生不同的應對方式,但又都是從哪一個根點而來的

例子3:多叉路口交通燈的管理問題

資料模型:“圖“”型資料結構

綜上可以得出:

資料結構是一門研究 非數值 計算的程式設計問題中計算機的 操作物件(資料)以及它們之間的關係 操作 等等的學科。

1.2 基本概念和術語

注:資料元素相當於一本書,每一個記錄都是一個數據,資料物件相當於一個班級,班級裡的人為資料元素,集合起來成為一個數據物件(計算機系)。

注:想要建立資料元素的結構,就必須找到資料間的關係

注:資料的集合和資料的關係尤其重要

注:順序結構用來實現線性結構,鏈式結構是用實現其他的邏輯結構。鏈式結構在高階語言中是用指標來實現的。

1.3 抽象資料型別的表現和實現

1.4 演算法與演算法設計

演算法:對特定問題求解步驟的一種描述,是指令的有序序列。

演算法的五個特性:有窮性(演算法程式的執行時間是有限的),確定性,可行性,輸入,輸出。

演算法設計的要求:時間複雜度,空間複雜度。

注:輔助空間是專為比如交換資料的第三方變數準備的空間

本章小結

  • 演算法與資料結構的基本概率(結構化程式)
  • 資料,資料型別,抽象資料型別(D S P)
  • 幾種基本資料結構(線,樹,圖)
  • 資料的物理結構和邏輯結構(物理結構為儲存結構,邏輯結構為不同的資料關係而構成的不同資料結構的集合)

                                                                第二章 線性表

                                                           (本章重點:線性表的定義,實現,操作,以及應用)

2.1 線性表的型別定義及基本操作

定義了D(資料)和S(關係)還有P(操作)那麼我們就可以定義(ADT)抽象資料型別了

序偶關係:a_{i-1}=a_{i}

2.2 線性表的順序表現和實現

線性表的基本操作實現——插入元素

線性表的基本操作實現——刪除線性表中的第i個元素

L.Elem是基地址,L.Length是尾地址

線性表的基本操作實現——取(讀)線性表L中的第i個元素

線性表的基本操作實現——判斷線性表的 i 是否為空

if L.length=0
    {    return true;
     }else{
        return false;
    }

線性表的基本操作實現——返回線性表L的長度

status Get(int lenght){
    return L.lenght;
}

之所以定義這些基本的操作是因為我們要在這些的基礎上實現複雜的操作。

更為複雜的演算法:


本講小結

  • 線性表的特點
  • 線性表的表現和儲存方式
  • 順序儲存的線性表基本操作的實現:插入,刪除

思考題:在一個有序的順序表中插入一個元素,使線性表任然有序。