스택은 삽입 및 삭제가 한 위치에서만 수행되도록 제한하는 목록입니다. 이 위치는 스택의 상단이라고 불리는 목록의 끝입니다. 스택의 기본 작업에는 푸시 앤 팝이 있습니다. 전자는 삽입이고 후자는 삭제됩니다.
스택은 또한 FIFO 테이블입니다.
스택의 두 가지 유형의 구현이 있습니다. 하나는 배열을 사용하고 다른 하나는 연결된 목록을 사용하는 것입니다.
공개 클래스 myArraystack <e> {private arraylist <e> list = new arraylist <> (); 공개 무효 푸시 (e e) {list.add (e); } public e pop () {return list.remove (list.size () -1); } public e peek () {return list.get (list.size () -1); } public boolean isempty () {return list.size () == 0; }} public class myLinkStack <e> {LinkedList <e> list = new LinkedList <> (); 공개 무효 푸시 (e e) {list.addlast (e); } public e pop () {return list.removelast (); } public e peek () {return list.getLast (); } public boolean isempty () {return list.size () == 0; }} 스택 애플리케이션
균형 기호
코드 문자열이 주어지면이 코드의 괄호가 구문과 준수하는지 확인합니다.
예를 들어 : [{()}] 이것은 합법적이지만 [{]} ()는 불법입니다.
다음은 테스트 코드입니다.
public class balancesymbol {public boolean isbalance (String String) {myArraystack <atire> stack = new MyArraystack <> (); char [] array = string.tochararray (); for (char ch : array) {if ( "{(". indexof (ch)> = 0) {stack.push (ch);} else if ( "}])". indexof (ch)> = 0) {if (ismatching (stack.peek (), ch)) {stack.pop (); }}} return stack.isempty (); } private boolean ismatching (char peek, char ch) {if ((peek == '{'&& ch == '}') || (peek == '['&& ch == ']') || (peek == '('&& ch == ')')) {return true; } false를 반환합니다. } public static void main (String [] args) {balancesymbol symbol = new Balancesymbol (); String String = "public static void main (String [] args) {balancesymbol symbol = new Balancesymbol ();}; String String2 = "public static void main (String [] args) {balancesymbol symbol = new Balancesymbol ([);}]; System.out.println (Symbol.isbalance (String)); System.out.println (Symbol.isbalance (String2)); }} 접미사 표현
예를 들어, 다음 입력은 해당 결과를 계산하고
3 + 2 + 3 * 2 =?
이것은 다른 계산 순서에서 다른 결과를 생성합니다. 계산 결과가 왼쪽에서 오른쪽으로 16이고 계산 결과가 수학 우선 순위에 따라 11 인 경우.
위의 디픽스 표현식이 접미사 표현식으로 변환되는 경우 :
3 2 + 3 2 * +
접미사 표현식을 사용 하여이 표현식의 값을 계산하는 것은 매우 간단합니다. 스택 만 사용하십시오.
숫자가 발생할 때마다 스택에 숫자를 넣으십시오.
연산자가 발생할 때마다 두 개의 요소가 팝업되어 연산자에 따라 계산 한 다음 스택에 올려 놓습니다.
스택을 팝업하는 유일한 요소는 계산 결과입니다.
/*** 단순화 된 버전, 각 피연산자는 하나이며 문자열이 합법적 인*/public class postfixexpression {public static int calculation (string) {myArrayStack <string> stack = new MyArraystack <> (); char [] arr = string.tochararray (); for (char ch : arr) {if ( "0123456789".indexof (ch)> = 0) {stack.push (ch + ""); } else if ( "+-*/". indexof (ch)> = 0) {int a = integer.parseint (stack.pop ()); int b = integer.parseint (stack.pop ()); if (ch == ' +') {stack.push ((a + b) + ""); } else if (ch == ' -') {stack.push ((a -b) + ""); } else if (ch == ' *') {stack.push ((a * b) + ""); } else if (ch == ' /') {stack.push ((a / b) + ""); }} return integer.parseint (stack.peek ()); } public static void main (String [] args) {System.out.println (계산 ( "32+32*+")); }} 디픽스 표현식을 접미사 표현식으로 변환하십시오
표현식 +, -, *, /, () 만 실행한다고 가정합니다. 그리고 표현은 합법적입니다.
a + b * c- (d * e + f) / g 변환 된 접미사 표현식은 다음과 같습니다.
abc * + de * f + g / -
접미사를 변환하기 위해 스택 리믹스를 사용하는 단계는 다음과 같습니다.
import java.util.hashmap; import java.util.map; public class expressionswitch {private static map <문자, integer> map = new Hashmap <문자, 정수> (); 정적 {map.put ( '+', 0); map.put ( '-', 1); map.put ( '*', 2); map.put ( '/', 3); map.put ( '(', 4);} private static char [] [] 우선 순위 = {// 현재 연산자 // + - */(/ * stack + */{ '>', '>', '<', '<', '<'},/ * top- */{ '>', '>', ',' '<', '<'},/ * */{/{ '>', '<'} '>', '>', '<'},/ * make/ */{ '>', '>', '>', ','> ','< '},/ * 문자 ( */{'< ','< ','< ','< ','< '},}; string.tocharray (); stack.push (ch)} else ( ')'== ch) {while (true &&! stack.isempty ()) {stack.pop () {break;} else {builder.append (tmp); stack.push (char tmp); } return builder.toString (); } private static boolean ispriorityHigh (char tmp, char ch) {return priority [map.get (tmp)] [map.get (ch)] == '>'; } public static void main (String [] args) {System.out.println (switch1 ( "a+b*c- (d*e+f)/g"); }}이 기사를 통해 모든 사람들이 Java Stack에 대한 지식을 마스터하기를 바랍니다. 이 웹 사이트를 지원 해주셔서 감사합니다!