本篇碎碎念:時隔n個月,繼續(xù)寫博客,假期落下的進(jìn)度,在開學(xué)后努力追趕,假期不努力,開學(xué)徒傷悲啊,此時此刻真想對自己說一句,活該啊~~~~
欠下的鏈表練習(xí)題講解會在下次更新~~~~
今日份勵志文案:?萬物皆有裂痕,那是光照進(jìn)來的地方
一.棧
棧:一種特殊的線性表,其只允許在固定的一端進(jìn)行插入和刪除元素操作。
棧中的元素遵守后進(jìn)先出LIFO原則
棧的相關(guān)使用方法
Stack<Integer> stack=new Stack<>();
//入棧
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack);
//彈出并獲取棧頂元素
int a=stack.pop();
System.out.println(a);
//獲取棧頂元素
int b=stack.peek();
System.out.println(b);
System.out.println(stack);
//判斷棧是否為空
boolean c=stack.isEmpty();
System.out.println(c);
//判斷棧的大小
int d=stack.size();
System.out.println(d);
練習(xí)題:1. 若進(jìn)棧序列為 1,2,3,4 ,進(jìn)棧過程中可以出棧,則下列不可能的一個出棧序列是()A: 1,4,3,2? ? ? ? ? ? ? ? ?B: 2,3,4,1? ? ? ? ? ? ? ? ?C?: 3,1,4,2? ? ? ? ? ? ?D: 3,4,2,120. 有效的括號 - 力扣(LeetCode)
這兩道題的答案與講解會在末尾公布
二.隊列
隊列:只允許在一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪除數(shù)據(jù)操作的特殊線性表
隊列具有先進(jìn)先出FIFO原則
入隊列:進(jìn)行插入操作的一端稱為隊尾(Tail/Rear) \
出隊列:進(jìn)行刪除操作的一端稱為隊頭
public static void main(String[] args){
Queue<Integer> q = new LinkedList<>();
q.offer(1);
q.offer(2);
q.offer(3);
q.offer(4);
q.offer(5); // 從隊尾入隊列
System.out.println("隊列中的元素個數(shù)為:");
System.out.println(q.size());
System.out.println("隊列中隊頭元素為:");
System.out.println(q.peek()); // 獲取隊頭元素
// 從隊頭出隊列,并將刪除的元素返回
q.poll();
System.out.println("經(jīng)過一個p.poll()剩下的元素為:");
System.out.println(q);
if(q.isEmpty()){
System.out.println("隊列空");
}else{
System.out.println(q.size());
}
}
?練習(xí)題:1. 若進(jìn)棧序列為 1,2,3,4 ,進(jìn)棧過程中可以出棧,則下列不可能的一個出棧序列是(C)A: 1,4,3,2? ? ? ? ? ? ? ? ?B: 2,3,4,1? ? ? ? ? ? ? ? ?C?: 3,1,4,2? ? ? ? ? ? ?D: 3,4,2,120. 有效的括號 - 力扣(LeetCode)
填空題
編程題
class Solution {
public boolean isValid(String s) {
Stack<Character> stack=new Stack<>();
for(int i=0;i<s.length();i++){
char count=s.charAt(i);
if(count=='('||count=='{'||count=='['){
stack.push(count);
}else{
if(stack.empty()){
return false;
}
char count1=stack.peek();
if(count==')'&&count1=='('||
count=='}'&&count1=='{'
||count==']'&&count1=='['){
stack.pop();
}else{
return false;
}
}
}
return stack.empty();
}
}
題目要求?
1.左括號必須用相同類型的右括號閉合。
2.左括號必須以正確的順序閉合。
3每個右括號都有一個對應(yīng)的相同類型的左括號。
問題1:我們?nèi)绾伪闅v字符串?? ? ? ? ? ? ? ??
問題2:如何判斷是相同類型的括號?
解1:可以用for循環(huán)或者while循環(huán)(我用的是for循環(huán))?
解2:創(chuàng)建一個棧(先進(jìn)后出原則),如果為左括號就進(jìn)棧
? ? ? ? 如果為右括號就與剛進(jìn)棧的左括號“配對”
“配對”方式,設(shè)置兩個char變量,count與count1
if(count==')'&&count1=='('||count=='}'&&count1=='{'||count==']'&&count1=='[')
“配對”成功,左括號出棧,繼續(xù)走循環(huán),“配對失敗”返回false
如果棧中沒有左括號,同時來了個右括號要配對,要返回false
?最后還有兩道練習(xí)題,大家可以嘗試一下
1. 用隊列實現(xiàn)棧。 225. 用隊列實現(xiàn)棧 - 力扣(LeetCode)2. 用棧實現(xiàn)隊列。 232. 用棧實現(xiàn)隊列 - 力扣(LeetCode)
如果有解釋的不對或者不清晰,如果可以從評論區(qū)指出,我一定會加以修改,萬分感謝文章來源:http://www.zghlxwxcb.cn/news/detail-851550.html
希望對你們有所幫助文章來源地址http://www.zghlxwxcb.cn/news/detail-851550.html
到了這里,關(guān)于Java------數(shù)據(jù)結(jié)構(gòu)之棧與隊列(簡單講解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!