棧:先進後出,只有乙個口。應用:瀏覽器的後退。
訪問:只訪問棧頂o(1);
搜尋:o(n);
插入:只能在棧頂插入和刪除o(1)
刪除:o(1)
棧的常用操作:
lc20和lc496
lc20:
其中:
for (char ch: s) else ,注意:表的訪問要用中括號[ ],', '
};stackstk; //棧
for (char ch: s)
stk.pop(); //如果上面兩個都不滿足,當前元素是右括號的情況下,棧沒空,而且棧頂元素等於當前元素在表中的對應值,則匹配,棧頂彈出
}else
}//遍歷完字串後,判斷棧是否為空,如果為空(isempty=1),有效字串,返回true;如果不為空(isempty=0),無效字串,返回false。
//所以返回isempty的返回值就可以了
成員函式不是isempty而是empty。
錯誤**:
class solution暴力解法:使用了break*/int n1 = nums1.size(), n2 = nums2.size();
vectorret;
if(n1 == 0 || n2 == 0)
for(int i=0;inums1[i])}}
}}return ret;}};
class solution講解:}ret.push_back(tmp);
}return ret;}};
nums2中的每乙個元素都是要入棧的,只不過是如果下乙個元素比當前元素大的話,當前元素作為鍵,下一元素作為值,匹配進入雜湊表,持續這個過程直到棧為空或者棧頂元素大於下一元素。如果陣列已經為空了但是棧還不為空的話,那麼元素出棧並且作為鍵,與1作為值匹配進入雜湊表。
要多畫圖,資料結構的圖來理解程式執行過程。
map的insert()成員函式:一對是乙個
錯誤**:
class solution ;舉一反三的解法:stk.push(nums2[0]);
for(int i=1;istk.top() && !stk.empty()));}
stk.push(nums2[i]);
}while(!stk.empty()));}
for(int i:nums1)
return ret;}};
單調棧的模板用法總結:
錯誤**:
class solution當棧頂元素小於nums2[i ]且棧不為空時迴圈。我本來以為while()的條件檢查是不需要考慮先後順序的,但這個錯誤說明了不是,必須先檢查棧是否為空,如果為空就不再檢查下乙個條件直接跳出迴圈,如果不為空再檢查下乙個條件。如果按照這種錯誤的寫法,先檢查棧頂元素是否小於nums2[i ],如果棧為空的話,指標就不知道指向**,變成了野指標,而野指標不能被訪問。正確的寫法:stk.push(nums2[i]);
}//遍歷完了nums2中的所有元素,如果棧不為空,就把棧中的元素作為鍵和-1作為值配對進入map
//並且出棧直到棧為空結束迴圈
while(!stk.empty())
//map 是nums2中每個元素作為鍵,對應的下乙個更大元素作為值的表, 遍歷nums1查表得到值,
//交給返回值陣列
錯誤原因:指標亂指,棧為空時呼叫top()函式:
問題出在這一句:
while(nums2[i]>stk.top() && !stk.empty())
while ( !stk.empty()&&(nums2[i]>stk.top())) //先檢查棧是否空
class solutionstk.push(nums2[i]);
}while(!stk.empty())
for(int i=0;is;
unordered_mapnum_map;
int size = nums1.size();
vectorvec_num;
for(int i=0;is.top())
s.push(nums2[i]);
}while(!s.empty())
for(int i=0;i正確提交。
資料結構之棧結構
棧結構是一種filo first in last out 的批量資料儲存結構。其特點是先進後出,後來者居上 棧的基本屬性 棧記憶體 棧頂標記 棧的當前元素個數 萬金油屬性 size 棧的基本操作 萬金油的的操作 根據實現的不同將棧結構分為兩種 1.鏈式棧 2.陣列 利用有表頭鍊錶的頭插法來完成棧的功...
資料結構之棧
4.8.2 四則運算表示式求值 程式如下所示 include include include 定義結點型別 typedef struct node node,pnode 定義棧的抽象資料型別 typedef struct stack stack,pstack 函式宣告 對棧進行初始化的函式 void...
資料結構之棧
資料結構之棧 本文討論棧的陣列實現。棧需要有如下幾個屬性 棧的容量 capacity 棧頂指標 儲存棧元素的陣列 根據這幾個屬性可以定義乙個棧結構體 struct stackrecord 然後定義棧的操作,一般可以包含如下幾個 棧的建立 stack createstack int size 棧的銷毀...