第一節 漢諾塔與棧

2021-08-20 04:49:54 字數 1979 閱讀 8335

漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。

大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

記得高中有道題就是求漢諾塔操作的步驟,當大家還是一籌莫展的時候數學老師給出了遞推公式,真真令人拍案叫絕!

寫程式,求解漢諾塔主要使用了遞迴的思想,會在之後的《演算法思想》中講解(如果可以堅持下去的話)。

這裡的每乙個塔,就是乙個

棧屬於線性表,只允許在一端插入(insert,也叫做入棧)和彈出(pop,也叫做出棧)

線性表可以簡單理解為乙個陣列(或者簡單鍊錶),除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的。

乙個棧結構上包含指向棧頂的乙個指標以及儲存資料的線性表,主要操作為入棧(push)和出棧(pop)。

我們可以用乙個陣列模擬棧的實現。

使用乙個指標(在資料裡面可以用下標)表示棧頂top,最開始top初始化為0表示棧為空,用乙個一維陣列儲存棧的資料。

//top表示棧頂所在的陣列下標,top==0,表示棧為空

int top=0;

//使用乙個陣列(線性表)儲存棧的資料

int a[10];

入棧的過程就是top增長的過程,同時把資料存到陣列裡面。

top++為自增操作,等價於,top=top+1,程式設計師都是偷懶的!

a[top]=b;top++;這兩行**等價於,a[top++]=b;,程式設計師都是偷懶的!

//入棧

scanf("%d",&b);

//儲存資料到棧,棧頂往上移一位

a[top++]=b;

出棧的操作更加簡單了,把top減小一位就好了。

//出棧

判斷回文是學習c語言都會遇到的問題,回文,顧名思義,就是乙個正讀和反讀都一樣的字串,例如ahha、klmlk都是回文,ahhh、pppkhdf不是回文。

「博大精深」的中華傳統文化就有精彩的回文:

信言不美,美言不信。 《道德經八十一》

那麼對於一串英文本串,如何使用判斷是否是回文呢?請思考一下再接著往下看。

思路:

- 讀入字串

- 將字串的前半段push到棧

- 從後半段開始,與棧頂元素比較,相等則彈出,不等直接break

- 最後判斷棧是否為空,不為空則不是回文,否則是回文

這裡是完整**,使用c語言

/*

輸入:ahhha

輸出:yes

輸入:lpppp

輸出:no

*/#include

#include

int main()

//top==0,棧為空,全部匹配完成

if (top == 0)

printf("yes");

else

printf("no");

getchar();getchar();

return

0;}

第一節綜述

shader是什麼?shader是著色器。渲染流水線的概念?渲染流水線的工作任務在於由乙個三維場景出發,生成一張二維影象。渲染流程分為3個階段 應用階段 幾何階段 光柵化階段。1 應用階段 由cpu負責實現,由開發者主導。最重要的輸出是渲染所需的幾何資訊,即渲染圖元。這些渲染圖元傳遞給幾何階段。2 ...

第一節 熱機

一.熱機 內燃機是熱機的一種,以汽油或柴油為燃料 二.汽油機 練1.三.柴油機 練2.從能量轉化的角度看,一台四衝程內燃機在乙個迴圈中 1 哪個衝程存在著化學能轉化為內能的過程?2 哪個衝程存在著內能轉化為機械能的過程?3 哪個衝程具有很明顯的機械能轉化為內能的過程?練3.關於單缸四衝程內燃機,下列...

第一節 linux c編譯

在linux中開發c或c 程式的步驟 先用vim編輯c或c 程式 c儲存為.c c 儲存為.cc 或.cpp檔案 對於.c格式的c檔案,可以採用gcc或g 編譯 對於 cc cpp格式的c 檔案,應該採用g 進行編譯 gcc編譯過程 gcc所支援字尾名 預處理階段 對包含的標頭檔案 include ...