何謂資料結構

文章目錄
  1. 1. 決定數據(Data)的順序和位置
  2. 2. 以電話簿的資料結構為例
    1. 2.1. 依序上往下追加
    2. 2.2. 依姓名的聲母順序管理
    3. 2.3. 各自優缺點
    4. 2.4. 試著結合兩者
      1. 2.4.1. ㄌ 表
      2. 2.4.2. ㄒ 表
      3. 2.4.3. ㄧ 表
  3. 3. 在資料結構下工夫,就能提高記憶體使用效率
  4. 4. Reference

決定數據(Data)的順序和位置

數據儲存在電腦的記憶體中,而記憶體如下圖所示,呈現箱子排成一列的形狀,每個箱子都存有一個數據。

當數據儲存在記憶體中時,決定數據的順序和位置的,就是「資料結構」(Data Structure)。

以電話簿的資料結構為例

依序上往下追加

在手機不盛行的年代,記下朋友電話就只能用紙筆記錄,通常都會每得到一組電話號碼,都由上往下依序寫在紙上。

姓名 電話號碼
楊美珍 0987-654-321
駱欣怡 0912-345-678
許如木 0956-781-234
林秀昌 0943-218-765

當要找「王珮雯」的電話時,因為資訊只是單純的以先後順序排列,所以不知道「王珮雯」的電話寫在哪裡,只能從_頭_開始尋找
(或是從_最後_開始,或是_隨機_尋找,但是非常耗時)

如果只有幾組電話或許可以馬上找到,但是當有數百、數千時可就非常麻煩了…ヾ(´∀`)ノ

依姓名的聲母順序管理

若換用注音(ㄅ、ㄆ、ㄇ)來管理電話號碼,因為姓名依照聲母順序排列,所以這類數據具有「結構」

姓名 電話號碼
林(ㄌㄧㄣˊ)秀昌 0943-218-765
駱(ㄌㄨㄛˋ)欣怡 0912-345-678
許(ㄒㄩˇ)如木 0956-781-234
楊(ㄧㄤˊ)美珍 0987-654-321

注意到,因「林秀昌」與「駱欣怡」聲母一樣(皆為ㄌ),因此再以第二個注音做排序

如此一來,從姓氏第一個字就大概能推測出位在電話簿何處位置,能較輕鬆找到對方電話號碼了

我想新增號碼怎麼辦?
今天認識了一位李(ㄌㄧˇ)安琪,要把電話號碼加進電話簿時,必須加在電話簿的第一順位
因此必須把所有電話號碼皆往下移動一行,才能將李安琪的電話插入電話簿第一行

依序進行「電話號碼皆往下移動一行」,假設每10秒可移動1筆資料,1分鐘才可移動6筆資料,一小時也才不過360筆資料….

各自優缺點

依序上往下追加:追加數據時相當容易,但查找費力。反之,根據姓名的聲母順序便於查找,但是不利於追加數據
一本電話簿,多種紀錄方式,各自精采,要用哪一種,取決於怎麼使用電話簿。
頻繁增加資訊卻不太需要查找(使用前者) vs 建立完成後幾乎不再更新 (使用後者)

試著結合兩者

例如將注音(ㄅ、ㄆ、ㄇ…)每一個聲母分成獨立的表格,在同一個表格中則採用依序上往下追加聯絡資訊。

ㄌ 表

姓名 電話號碼
駱欣怡 0912-345-678
林秀昌 0943-218-765

ㄒ 表

姓名 電話號碼
許如木 0956-781-234

ㄧ 表

姓名 電話號碼
楊美珍 0987-654-321

像這樣,新增聯絡資訊時,只要加在該聲母開頭的表格最末行就好,查找電話時,也只需查找該聲母表格
(不過,因為各表格並無特別順序,因此該表仍需整份檢索,但比起整本電話簿查找已省去不少時間)

在資料結構下工夫,就能提高記憶體使用效率

資料結構的邏輯與上述電話簿相同。當數據儲存在記憶體中,根據目的妥善結構化數據,就能提高使用效率。

Reference

此一系列筆記為閱讀演算法圖鑑後心得,畢竟不是本科系出身,希望能透過撰寫電子檔過程中,對於資料結構、演算法等有進一步認識╰(´︶`)╯♡

相關文章