02 什么是編程:算法+數(shù)據(jù)結(jié)構(gòu)

編程,簡(jiǎn)單的就是 算法+ 數(shù)據(jù)結(jié)構(gòu)
當(dāng)然可以!我們可以用一個(gè)非常生活化的比喻,把“編程”“算法”“數(shù)據(jù)結(jié)構(gòu)”講得像做飯一樣簡(jiǎn)單。


一、理解編程

? 一句話理解:

編程就是教電腦怎么一步步幫你做事,算法是你想出來的“做事步驟”,數(shù)據(jù)結(jié)構(gòu)是你用來“裝東西”的碗、盤子、保鮮盒。


???? 比喻開始:你要做一道“西紅柿炒雞蛋”

1. 編程 = 整個(gè)做飯過程

你站在廚房里,從拿食材到出鍋,每一步都要想清楚、按順序做:

  • 先洗西紅柿 → 切西紅柿 → 打雞蛋 → 點(diǎn)火 → 倒油 → 炒 → 出鍋
    編程就是把這一整套步驟,用電腦能聽懂的語(yǔ)言(比如 Python、Java)寫下來,讓電腦自己去“做這道菜”。

2. 算法 = 你腦子里“怎么炒”的那套方法

同樣是西紅柿炒雞蛋,不同的人有不同做法:

  • 有人先把雞蛋炒熟盛出來,再炒西紅柿,最后混合;
  • 有人一起倒進(jìn)去炒。
    這些不同的“做法步驟”就是算法。
    算法沒有絕對(duì)的對(duì)錯(cuò),只有“好不好吃”(效率高不高、資源省不?。?。

3. 數(shù)據(jù)結(jié)構(gòu) = 你裝食材的碗、盤子、保鮮盒

  • 雞蛋打在碗里,西紅柿切好放盤子里,鹽放在小調(diào)料罐
    如果亂放:把雞蛋直接放鍋里、西紅柿丟地上,那就亂套了。
    數(shù)據(jù)結(jié)構(gòu)就是你在電腦里“放東西”的方式。
  • 想按順序排隊(duì)?用“列表”。
  • 想快速查找?用“字典”。
  • 想先進(jìn)后出?用“棧”(就像一摞盤子,只能從最上面拿)。

?? 小白總結(jié)一句話:

**編程就是寫“菜譜”,包括:

  • 算法是“做菜步驟”,
  • 數(shù)據(jù)結(jié)構(gòu)是“裝食材的容器”。**

只要你能把一件事拆成步驟、想清楚怎么裝東西,你就已經(jīng)在編程了!


二、舉例

下面用 3 個(gè)“秒懂”小例子,介紹下「算法 + 數(shù)據(jù)結(jié)構(gòu)」


1. 數(shù)據(jù)結(jié)構(gòu): list ——「盤子」里按順序放雞蛋

# 盤子:先把雞蛋一個(gè)個(gè)放進(jìn)去
pan = []                       # 空盤子
for i in range(5):
    pan.append(f'雞蛋{i+1}號(hào)')  # 往盤子里放雞蛋
print('出鍋順序:', pan)

運(yùn)行結(jié)果

出鍋順序: ['雞蛋1號(hào)', '雞蛋2號(hào)', '雞蛋3號(hào)', '雞蛋4號(hào)', '雞蛋5號(hào)']

一句話:list 就是一條“有序長(zhǎng)隊(duì)”,誰先放誰在前。


2. 算法:兩種“找最大雞蛋”的方法

import random, time

pan = [random.randint(40, 70) for _ in range(100_000)]  # 10萬個(gè)隨機(jī)克重的雞蛋

# 方法1:Python 內(nèi)置算法(C 語(yǔ)言寫的,極快)
t0 = time.time()
print('最大雞蛋:', max(pan), '克,耗時(shí):', time.time() - t0, '秒')

# 方法2:自己寫“擂臺(tái)賽”算法
t0 = time.time()
max_egg = pan[0]
for egg in pan:
    if egg > max_egg:
        max_egg = egg
print('最大雞蛋:', max_egg, '克,耗時(shí):', time.time() - t0, '秒')

一句話:同一個(gè)問題可以有不同的“步驟”(算法),速度差很多。


3. 數(shù)據(jù)結(jié)構(gòu) + 算法:dict ——「冰箱」秒找食材

# 冰箱:名字 → 位置
fridge = {
    '西紅柿': '上層左門',
    '雞蛋': '中層抽屜',
    '蔥花': '下層保鮮盒'
}

# 算法:直接“按名取物”,一步到位
need = ['雞蛋', '西紅柿']
for item in need:
    print(f'{item} 在 {fridge[item]}')

運(yùn)行結(jié)果

雞蛋 在中層抽屜  
西紅柿 在上層左門

一句話:dict 就像“帶標(biāo)簽的冰箱”,找東西永遠(yuǎn)只要 1 步。


30 秒總結(jié)

  • 把東西「怎么放」——數(shù)據(jù)結(jié)構(gòu)(list / dict / …)
  • 把問題「怎么做」——算法(for 擂臺(tái) / max / …)
  • 把兩者用 Python 寫出來——就是在「編程」。

三、數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)來自哪里

把“數(shù)據(jù)結(jié)構(gòu)”想成一個(gè)空抽屜柜,數(shù)據(jù)就是你要放進(jìn)去的衣服。
衣服(數(shù)據(jù))從哪來?給你 4 種最最常見的“進(jìn)貨渠道”,一句話就能懂。


1. 寫死——“衣服出廠直接縫死在抽屜里”

# 抽屜一打開,衣服已經(jīng)焊在里面
wardrobe = ['T恤', '牛仔褲', '衛(wèi)衣']

場(chǎng)景:小程序、Demo、考試題,圖方便,直接寫。
缺點(diǎn):想換款式得拆柜子(改代碼)。


2. 文件——“去樓下快遞柜拿衣服”

# 衣服在 csv 文件里,一行一件
with open('clothes.csv', encoding='utf-8') as f:
    wardrobe = [line.strip() for line in f]

場(chǎng)景:本地 Excel、日志、配置。
優(yōu)點(diǎn):換數(shù)據(jù)不換代碼,改文件即可。


3. 數(shù)據(jù)庫(kù)——“去大型倉(cāng)庫(kù)調(diào)貨”

import sqlite3
conn = sqlite3.connect('shop.db')
wardrobe = [row[0] for row in conn.execute("SELECT name FROM clothes")]
conn.close()

場(chǎng)景:真正上線的系統(tǒng),數(shù)據(jù)量大、多人共用。
優(yōu)點(diǎn):存取快、能搜索、能統(tǒng)計(jì)。


4. 網(wǎng)絡(luò)——“讓無人機(jī)空投最新款”

import requests
url = 'https://api.shop.com/clothes'
wardrobe = requests.get(url).json()   # 一鍵到貨

場(chǎng)景:手機(jī) App、網(wǎng)頁(yè)、小程序,實(shí)時(shí)拉新數(shù)據(jù)。
優(yōu)點(diǎn):永遠(yuǎn)拿到最新款;缺點(diǎn):沒網(wǎng)就“裸奔”。


10 秒總結(jié)

來源 比喻 一句話特點(diǎn)
寫死 衣服焊死在抽屜 最快,最死板
文件 快遞柜取衣服 改文件即可更新
數(shù)據(jù)庫(kù) 倉(cāng)庫(kù)調(diào)貨 量大、多人、安全
網(wǎng)絡(luò) 無人機(jī)空投 實(shí)時(shí)最新,依賴網(wǎng)速

空抽屜柜(數(shù)據(jù)結(jié)構(gòu))長(zhǎng)一樣,衣服(數(shù)據(jù))從哪來,你說了算!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容