中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

東山縣建設銀行網(wǎng)站企業(yè)郵箱查詢

東山縣建設銀行網(wǎng)站,企業(yè)郵箱查詢,海南黃頁電話號碼,做網(wǎng)站用html還是jsp一、棧Stack 1.1 概念 一種特殊的線性表,只允許在固定的一段進行插入和刪除元素操作。進行數(shù)據(jù)的插入和刪除操作的一段稱為棧頂,另一端稱為棧低。棧中的元素遵循后進先出 LIFO(Last In First Out)的原則。 進棧 出棧 舉例:在word中&#xf…

一、棧Stack

1.1 概念

一種特殊的線性表,只允許在固定的一段進行插入和刪除元素操作。進行數(shù)據(jù)的插入和刪除操作的一段稱為棧頂,另一端稱為棧低。棧中的元素遵循后進先出 LIFO(Last In First Out)的原則。

進棧
出棧

舉例:在word中,如果要想進行添加、刪除。修改相關信息,則當用戶選擇撤銷時,程序?qū)祷厣弦粋€操作狀態(tài)。

1.2 棧的使用

棧的方法及其功能

方法

功能
Stack()構(gòu)造一個空棧
E push(E e)將e入棧,并返回e
E pop()將棧頂元素出棧并返回
E peek()獲取棧頂元素
int size()獲取棧中有效元素個數(shù)
boolean empty()檢測棧是否為空
public static void main(String[] args) {Stack<Integer> s = new Stack();s.push(1);s.push(2);s.push(3);s.push(4);System.out.println(s.size()); // 獲取棧中有效元素個數(shù)---> 4System.out.println(s.peek()); // 獲取棧頂元素---> 4s.pop(); // 4出棧,棧中剩余1 2 3,棧頂元素為3System.out.println(s.pop()); // 3出棧,棧中剩余1 2 棧頂元素為3if(s.empty()){System.out.println("???#34;);}else{System.out.println(s.size());}
}

1.3 模擬實現(xiàn)棧

Stack繼承了Vector,Vector和ArrayList類似,都是動態(tài)的順序表,不同的是Vector是線程安全的.

public class MyStack {public int[] elem;public int usedSize;public MyStack() {this.elem = new int[10];}public void push(int val) {if(isFull()) {this.elem = Arrays.copyOf(elem,2*elem.length);}elem[usedSize++] = val;}private boolean isFull() {return usedSize == elem.length;}public int pop() {if(isEmpty()) {throw new EmptyStackException("pop()空棧異常");}int val = elem[usedSize - 1];usedSize--;return val;}public int peek() {if(isEmpty()) {throw new EmptyStackException("peek()空棧異常");}return elem[usedSize - 1];}private boolean isEmpty() {return usedSize == 0;}
}

1.4 棧的應用場景

1. 改變元素的序列

?若進棧序列為 1,2,3,4 ,進棧過程中可以出棧,則下列不可能的一個出棧序列是()

A: 1,4,3,2? ? ?B: 2,3,4,1? ?? C: 3,1,4,2? ? ?D: 3,4,2,1

解析:錯誤出棧序列的解析如下,正確出棧序列解析同下

2.一個棧的初始狀態(tài)為空。現(xiàn)將元素1、2、3、4、5、A、B、C、D、E依次入棧,然后再依次出棧,則元素出棧的順序是( )。

A: 12345ABCDE? ? ?B: EDCBA54321? ? ? C: ABCDE12345? ? ? D: 54321EDCBA

解析:根據(jù)棧中元素遵循先進后出的原則,得出棧順序為EDCBA54321

2. 將遞歸轉(zhuǎn)化為循環(huán)鏈表

// 遞歸方式
void printList(Node head){if(null != head){printList(head.next);System.out.print(head.val + " ");}
}
// 循環(huán)方式
void printList(Node head){if(null == head){return;}Stack<Node> s = new Stack<>();// 將鏈表中的結(jié)點保存在棧中Node cur = head;while(null != cur){s.push(cur);cur = cur.next;}// 將棧中的元素出棧while(!s.empty()){System.out.print(s.pop().val + " ");}
}

3.?括號匹配

首先,判斷獲取的字符是否是左括號,如果是則插入到棧中;如果棧為空則返回false;如果前兩種情況都不是,則此時為右括號,然后判斷棧頂元素和當前字符進行匹配,若滿足條件則刪除棧頂元素,否則返回false。最后當字符串遍歷完后,如果棧中還有元素,則此時左括號多,返回false。如果棧為空,則返回true。

class Solution {public boolean isValid(String s) {//創(chuàng)建一個空棧Stack<Character> stack = new Stack<>();for(int i = 0;i < s.length();i++) {//遍歷字符串獲取字符char ch = s.charAt(i);//如果ch為左括號,則放入棧中if(ch == '(' || ch == '[' || ch == '{' ) {stack.push(ch);}else {//此時ch為右括號//情況1:棧中沒有左括號進行匹配,右括號多if(stack.isEmpty()){return false;}//情況2:棧中右左括號,需判斷棧頂ch2(右括號)是否和ch(右括號)匹配char ch2 = stack.peek();if( ch2 == '(' && ch == ')' || ch2 == '[' && ch == ']' || ch2 == '{' && ch == '}' ) {stack.pop();}else {//此時,棧不為空,但括號不匹配return false;}}}//字符串已經(jīng)遍歷完了,若棧不為空,則左括號多if(!stack.isEmpty()) {return false;}return true;}
}

4.?逆波蘭表達式

class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack<>();for(String str : tokens) {if(isNumber(str)) {int x = Integer.parseInt(str);stack.push(x);}else {int val2 = stack.pop();int val1 = stack.pop();switch (str) {case "+":stack.push(val1 + val2);break;case "-":stack.push(val1 - val2);break;case "*":stack.push(val1 * val2);break;case "/":stack.push(val1 / val2);break;}}}return stack.pop();}private boolean isNumber(String str) {return !(str.equals("+")|| str.equals("-" )|| str.equals("*")|| str.equals("/"));}
}

5. 出棧入棧次序匹配

解析:遍歷pushV數(shù)組,每次入棧一個元素后,將棧頂元素與popV中下標為j所對應的元素進行比較,如果一樣,則可以出棧;不一樣,i++。在遍歷時,可能會出現(xiàn)多個相同,所以需用到循環(huán)

public class Solution {/*** 代碼中的類名、方法名、參數(shù)名已經(jīng)指定,請勿修改,直接返回方法規(guī)定的值即可** * @param pushV int整型一維數(shù)組 * @param popV int整型一維數(shù)組 * @return bool布爾型*/public boolean IsPopOrder (int[] pushV, int[] popV) {// write code hereStack<Integer> stack = new Stack<>();int j = 0;for(int i = 0;i < pushV.length;i++) {stack.push(pushV[i]);while(!stack.empty() && j < popV.length && stack.peek() == popV[j]) {stack.pop();j++;}}return stack.empty();}
}

6.最小棧

class MinStack {public Stack<Integer> stack;public Stack<Integer> minStack;public MinStack() {stack = new Stack<>();minStack = new Stack<>();}public void push(int val) {stack.push(val);if(minStack.isEmpty() || val <= minStack.peek()) {minStack.push(val);}else {return;}}public void pop() {if(minStack.isEmpty()) {return;}int popVal = stack.pop();if(popVal == minStack.peek()) {minStack.pop();}}public int top() {if(minStack.isEmpty()) {return -1;}return stack.peek();}public int getMin() {if(minStack.isEmpty()) {return -1;}return minStack.peek();}
}

http://www.risenshineclean.com/news/11233.html

相關文章:

  • 學做網(wǎng)站都要學什么專業(yè)外貿(mào)訂單一般在哪個平臺接
  • html5 網(wǎng)站建設方案百度競價排名的利與弊
  • 網(wǎng)站建設語百度搜索大全
  • 本科網(wǎng)站開發(fā)畢業(yè)設計我為什么不建議年輕人做運營
  • 成人午夜黃網(wǎng)站在線觀看吉林網(wǎng)站seo
  • 網(wǎng)站怎么提高權(quán)重百度招聘網(wǎng)最新招聘信息
  • 專業(yè)3合1網(wǎng)站建設公司搜索風云榜
  • 什么是營銷網(wǎng)站哈爾濱seo推廣優(yōu)化
  • 南京做網(wǎng)站南京樂識最優(yōu)如何快速推廣自己的品牌
  • 宜昌市高新區(qū)建設局網(wǎng)站如何做好市場推廣
  • 發(fā)布消息做任務的網(wǎng)站百度競價調(diào)價軟件
  • oa網(wǎng)站建設價格泉州百度推廣排名優(yōu)化
  • .design 域名的網(wǎng)站微信搜一搜seo優(yōu)化
  • 成品網(wǎng)站模板下載吉林seo刷關鍵詞排名優(yōu)化
  • 做網(wǎng)站推廣微信叫什么網(wǎng)名好適合口碑營銷的產(chǎn)品
  • 一般網(wǎng)站做哪些端口映射快速seo整站優(yōu)化排行
  • 帝國 只做網(wǎng)站地圖互聯(lián)網(wǎng)項目推廣是什么
  • 利用php制作動態(tài)網(wǎng)站開發(fā)百度搜索關鍵詞排名
  • 網(wǎng)站建設怎么樣工作湘潭高新區(qū)最新新聞
  • 外貿(mào)公司網(wǎng)站建設落實20條優(yōu)化措施
  • 環(huán)球資源網(wǎng)官網(wǎng)長沙seo工作室
  • 湖南網(wǎng)站建設seo優(yōu)化國際新聞最新消息中國
  • 上海營銷型網(wǎng)站建設價格武漢服裝seo整站優(yōu)化方案
  • wordpress 科技聯(lián)盟seo內(nèi)部優(yōu)化具體做什么
  • 醫(yī)院網(wǎng)站建設技術方案今日國內(nèi)最新新聞
  • 站酷網(wǎng)怎么賺錢鄭州網(wǎng)站建設推廣優(yōu)化
  • wordpress免簽約支付寶西安seo工作室
  • 網(wǎng)站開發(fā)建設專業(yè)品牌網(wǎng)站建設制作
  • 可以玩小游戲的網(wǎng)站東莞網(wǎng)站seo公司哪家大
  • 成年人正能量入口網(wǎng)站怎么優(yōu)化排名的方法