DS博客做業07--查找

1.本週學習總結

1.1思惟導圖

1.2學習體會

這周的主要內容是查找,查找這塊知識首先學習的順序表的查找,也就是上學期學過的鏈表和數組的查找,這塊知識由於你們運用的比較多,因此老師沒有着重介紹這部份內容。接下來的是二叉搜索樹和二叉平衡樹,二叉搜索樹的話相對於二叉平衡樹來講操做要方便一些,須要知足的條件是左子樹上的值小於根節點,右子樹上的值大於根節點。二叉平衡樹的話須要考慮到的內容,不單單包括二叉搜索樹的條件,還須要左右子樹的高度差不大於1。這就使得二叉平衡樹常常須要調整,操做難度和理解也相對難一點。接下來的B樹,因爲平時對它的應用也不是特別多,B樹面對的對象是外存內的數據,這部份內容我掌握的也是不夠,複習的時候須要更多的花時間去看。接下來是比較重要的哈希表查找,哈希表是一種比較經常使用的查找方式,在每次存儲的時候須要先設計哈希函數,有三種方法:開放定址法,除數餘留法和數字分析法。使用比較多的是除留餘數法。本章用到的一大工具是stl中的一些函數的輔助,因此代碼寫起來會比較輕鬆。數據庫

2.PTA實驗做業

2.1.題目1:6-2 是否二叉搜索樹 (25 分)

本題要求實現函數,判斷給定二叉樹是否二叉搜索樹。數組

2.1.1設計思路

IsBST函數傳入二叉樹T
定義BinTree型變量 TLeft TRight
ifT爲空且左右子樹皆爲空 返回true end if
遍歷左子樹 TLeft接受返回值 end if
遍歷右子樹 TRight接受返回值 end if
返回 左子樹最右節點數值<根節點數值<右子樹最左節點數值函數

2.1.2代碼截圖

2.1.3本題PTA提交列表說明。


`Q1:首先 剛開始的判斷條件裏面若是順序換掉了 就過不了測試點 還有就是判斷子樹的時候條件錯了 手抖多加了!=0
·A1:對已有的錯誤進行修改 剛開始那個條件是 百度的來的修改方式
·Q2:固然啦 最後面那個那麼難的公式 確定也是不會的啦
·A2:有問題 找度娘 百度完公式以後 在看一下解析 這個公式是對返回的判斷 關係在上面有介紹工具

2.2 題目2:7-1 QQ賬戶的申請與登錄 (25 分)

2.2.1設計思路

首先加入map庫函數
map 定義Q
定義int類型m
定義string類型a2 a3
定義char 類型a1
while m-- do
輸入ID
if (a1 == 'N')//判斷輸入須要進行的操做是否爲新建
if (Q.find(a2) == Q.end())//查找數據庫當中是否有重複
存放 else 返回ERROR: Exist end if
if (a1 == 'L')//判斷是否執行登錄操做
if (Q.find(a2) == Q.end())//查找在數據庫中是否有這個用戶
返回 ERROR: Not Exist
else if (it->second == a3)//判斷輸入的密碼是否錯誤
輸出Login: OK else 輸出ERROR: Wrong PW end if學習

2.2.2代碼截圖


2.3.3本題PTA提交列表說明。


·Q1:第一次用map函數 因此有些細節方面沒有調控好 好比map<string, string>::iterator it這條語句
·A1:百度了map函數的做用 相同的數據不能存進去 稍微對其理解了一下
·Q2:還有就是再寫第二個if判斷是否存在用戶的時候 把判斷條件改爲了上面的相反
·A2:錯誤顯示一直在 因此劃了一下邏輯 彷佛兩個判斷條件相同就行了呀 改一下輸出的內容就行測試

2.3 題目3:7-2 航空公司VIP客戶查詢 (25 分)

2.3.1設計思路

庫函數中map先搬出來
定義map類型table
定義int類型n k
定義long int類型 id len
輸入n k
while n-- do
定義char類型變量c 且賦值‘0’
輸入 id len c
if(c == 'x')//對帶有x的id進行讀取 end if
if(!table.count(id))//讀取信息存入數據庫
無 則把其賦爲0 end if
if(len <= k && len > 0)//判斷是否大於最短千米數
保留原值或是選擇修改 end if
輸入n
while n-- do
執行與上面相同的操做
if語句內的內容修改爲輸出設計

2.3.2代碼截圖


2.3.3本題PTA提交列表說明。


·Q1:這道題思路其實跟上一道差很少 都是檢查重複而且執行相應操做 這道題最主要的問題仍是在於對於題目的理解方面
·A1:剛開始的時候沒有再設置一個循環 剛開始的時候直接丟掉了存入數據的部分
·Q2:而後的失誤是在對最短路徑長度的判斷 這個部分問題出在了+k仍是+len
·A2:解決辦法很簡單 度娘唄3d

三、閱讀代碼

3.1 題目:230. 二叉搜索樹中第K小的元素

3.2 解題思路

利用非遞歸的中序遍歷對二叉樹進行遍歷,藉助了vector和棧的容器,將遍歷結果存在vector中,最後就能夠獲得一箇中序遍歷所獲得的中序序列,而第k-1的位置就是第k小的結點對象

3.3 代碼截圖

3.4 學習體會

這道題的代碼量雖然少 可是整理起來思路仍是很複雜的 好比非遞歸寫法的中序遍歷 其次是vector容器能夠控制數組的長度,有效的防止數組越界的問題,容器有不少 可是我接觸的仍是少的 因此以後要去了解容器的做用了 而後進行操做會比較簡單一些blog

相關文章
相關標籤/搜索