- 算法競賽實戰(zhàn)筆記
- 梁博等編著
- 876字
- 2024-03-14 16:59:11
1.1.1 數(shù)據(jù)結(jié)構(gòu)的定義
數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種關(guān)系的數(shù)據(jù)元素的集合,以及該集合中元素之間的關(guān)系。這個科學(xué)定義比較抽象,如何理解呢?
讓我們一起假想一個實際場景:請編寫一個程序,輸入3個整數(shù),找出這3個整數(shù)中最小的數(shù)字。
不妨設(shè)3個變量a、b、c,用于存儲輸入的3個整數(shù),輸入完成以后,假設(shè)a是最小的。將a和b進(jìn)行比較,如果b比a小,則把b的值賦給a。此時,a里面存儲的一定是a和b中的較小值。再比較a和c,如果c比a小,則把c的值賦給a。完成這個步驟后,a中存儲的是3個數(shù)中的最小值,實現(xiàn)上述步驟的程序如下:


上述問題并不難解決,但是如果數(shù)字增多,問題就會變得非常棘手。比如數(shù)字增加到10個,需要定義a、b、c、d、e、f、g、h、i、j等10個變量,if語句也需要羅列10句。如果是100個數(shù)字呢?如果是1000個數(shù)字呢?遇到這樣的困難,歸根結(jié)底是因為數(shù)字之間沒有建立關(guān)系,所有的數(shù)字都是獨立分散存儲的。
如果換一個思路,使用數(shù)組來存儲,問題就會變得很容易處理。數(shù)組就是一種最基礎(chǔ)、最常見的數(shù)據(jù)結(jié)構(gòu)。它的特點就是,把一組相同類型的數(shù)字,按照線性方式,存儲在連續(xù)相鄰的位置上。此時所有數(shù)字都可以用一個名字來表示,比如 a,用數(shù)組下標(biāo)來區(qū)分這是數(shù)組中的第幾個元素。此時輸入可以用循環(huán),輸入完成后,假設(shè) a[0]是最小的,則依次把a[0]與后面每個元素比較,如果發(fā)現(xiàn)更小的,就賦值給a[0],這樣對于100個數(shù)字的問題,代碼如下:

不管數(shù)據(jù)規(guī)模多大,都只需要調(diào)整常量MAXN的大小即可,程序并不會變得更難寫。事實上,還可以定義一個變量 n,表示數(shù)據(jù)的個數(shù),這樣程序可以處理的數(shù)據(jù)規(guī)模就是可變的了。
通過上文的例子可以看到,在合理選用數(shù)組這個數(shù)據(jù)結(jié)構(gòu)以后,由于數(shù)據(jù)緊密組織在一起,編程更方便。數(shù)組就是一個線性數(shù)據(jù)結(jié)構(gòu),其數(shù)據(jù)元素線性排列,元素之間有前后相鄰的關(guān)系。
我們可以定義數(shù)據(jù)結(jié)構(gòu) DataStructure=(D,R)。其中,D 是數(shù)據(jù)元素的集合;R 是該集合中所有元素關(guān)系的有限集合。根據(jù)數(shù)據(jù)之間的關(guān)系,可以把數(shù)據(jù)結(jié)構(gòu)分為3種類型:線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖形結(jié)構(gòu)(見圖1.1)。本章主要介紹線性結(jié)構(gòu),簡要介紹樹形結(jié)構(gòu)。

圖1.1 線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖形結(jié)構(gòu)
- 全國職稱計算機考試專用教材:Internet應(yīng)用
- 金牌網(wǎng)管師(初級)網(wǎng)絡(luò)實驗手冊
- 華為ICT大賽實踐賽昇騰AI賽道真題解析
- 思科網(wǎng)絡(luò)技術(shù)學(xué)院教程CCNA Exploration:LAN交換和無線
- 全國職稱計算機考試講義·真題·預(yù)測三合一:中文Windows XP操作系統(tǒng)
- 全國計算機等級考試上機專用題庫與筆試模擬考場:二級 Visual Basic
- 全國計算機等級考試一本通:二級Visual Basic
- 程序設(shè)計競賽專題挑戰(zhàn)教程
- 全國計算機等級考試一本通:一級MS Office
- 系統(tǒng)集成項目管理工程師默寫本
- 全國計算機等級考試一本通:二級Visual Basic
- 動畫制作(中級)
- 全國計算機等級考試一本通:二級Visual FoxPro
- 全國計算機等級考試歷年真題與機考題庫:二級C語言
- 全國職稱計算機考試講義·真題·預(yù)測三合一:Internet應(yīng)用