05-查找
阿新 • • 發佈:2018-05-27
鍵值 HR 作業 函數 根節點 利用 完成 ear 否則
1.學習總結
1.1查找的思維導圖
1.2 查找學習體會
查找內容很多,像平均查找長度,平均二叉樹插入刪除時的調整,還有B樹,哈希表,哈希沖突等重要內容,查找的內容也與我們平時生活聯系很深。
本周還學習了Map,STL的一個容器,它提供一對一的hash,很多功能直接調用函數,很方便
- 變量聲明:map
- map的所有節點元素都是pair,pair有兩個成員變量first,second ,第一個first是鍵值key,第二個second是實值value
- 插入元素:
(1)用insert函數插入pair:mapStudent.insert(pair - 查找:出現時,它返回資料所在位置,如果沒有,返回iter與end函數返回相同
iter = mapStudent.find("r123");
if(iter != mapStudent.end())
cout<<"Find, the value is"< - set使用方法:
begin()返回set容器的第一個元素
end() 返回set容器的最後一個元素
clear() 刪除set容器中的所有的元素
empty() 判斷set容器是否為空
max_size()返回set容器可能包含的元素最大個數
size()返回當前set容器中的元素個數
rbegin返回的值和end()相同
rend()返回的值和rbegin()相同 - 判斷鍵值是否存在:
count() 用來查找set中某個某個鍵值出現的次數因為一個鍵值在set只可能出現0或1次,這樣就變成了判斷某一鍵值是否在set出現過了
2.PTA實驗作業
2.1 題目1:是否二叉搜索樹
2.2 設計思路
建樹
如果為空樹則為二叉搜索樹
如果無左右孩子也為二叉搜索樹
如果左孩子不為空
利用循環找到左子樹最右節點
如果該節點的值大於根節點的值,則不滿足非空左子樹的所有鍵值小於其根結點的鍵值,不是二叉搜索樹
如果右孩子不為空
利用循環找到左子樹最左節點
如果該節點的值小於根節點的值,則不滿足非空右子樹的所有鍵值大於其根結點的鍵值,不是二叉搜索樹
利用遞歸繼續判斷其他節點
2.3 代碼截圖
2.4 PTA提交列表說明
- 編譯錯誤
bool返回類型應該是true或者false,但是判斷是否為空時,我返回了NULL - 段錯誤
調試時發現卡在BinTree P=T處,是不是再進入這條語句時,又創建了一次BinTree P,類似於程序中出現倆個同名定義變量,於是把BinTree P這一句挪到了if語句外,但是結果與測試案例不符。所以按照題目中的一條條要求又重寫了一次
2.1 題目2:QQ帳戶的申請與登陸
2.2 設計思路
輸入指令行數
輸出指令
如果命令符為“L”
如果找不到該賬號,輸出ERROR: Not Exist
如果存在該賬號
判斷賬戶密碼,如果正確,輸出Login: OK,否則,輸出ERROR: Wrong PW
如果命令符為“N”
如果找不到該賬號,插入該新賬號,輸出New: OK
如果找到該賬號,輸出ERROR: Exist
2.3 代碼截圖
2.4 PTA提交列表說明
格式錯誤(這個沒什麽好說明的。。。)
2.1 題目3:航空公司VIP客戶查詢
2.2 設計思路
輸入飛行記錄行數N,最低裏程K
循環輸入N行飛行記錄
判斷已有記錄中是否有當前身份證號碼
如果沒有,給裏程值賦初值0
如果該記錄裏程值小於K大於0,裏程值在原先基礎上累加K
如果大於K,累加該記錄裏程值
循環結束
輸入整數M
循環輸入M行查詢人的身份證號碼
如果記錄中沒有該查詢人,輸出No Info
如果記錄中有該查詢人,輸出其當前的裏程累積值
循環結束
2.3 代碼截圖
2.4 PTA提交列表說明
運行超時,一開始理解成不能滿足大數據,是類型定義錯誤,但是改完還是錯的。。。嘗試了很久,實在找不出來問題,詢問了炳輝大佬,他說把c++的輸出輸出換成c的。百度下得到的是“輸入數字沒有問題,如果輸入非整形的話,cin流的狀態會被破壞,無法繼續輸入,可以用cin.clear清一下流的狀態,或者把輸入的部分放入while循環,輸入錯誤時退出”所以改用scanf,printf反而方便一點
3.截圖本周題目集的PTA最後排名
3.1 PTA排名
3.2 我的總分:2.5
4. 閱讀代碼
代碼鏈接:https://blog.csdn.net/chenhanzhun/article/details/39529425
代碼鏈接:https://blog.csdn.net/mdl13412/article/details/6655581
這倆篇博客的註釋都很詳細,頭文件裏的東西很復雜,但是調用map.h後續功能的實現都很方便,像本章學習的查找,如果用樹來實現,建樹,再遍歷查找,代碼量很大,但是調用Map的話,利用insert()和find(),幾句代碼就可以實現了,具體操作不需要我們來完成,知道原理就可以了,比如find()函數,如果找到它會返回一個叠代器指向鍵值為key的元素,如果沒找到就返回指向map尾部的叠代器
5. 代碼Git提交記錄截圖
05-查找