데이터 구조 --- 스 택 의 응용

창고.
스 택 은 한 위치 에서 만 삽입 과 삭 제 를 제한 하 는 표 입 니 다. 이 위 치 는 표 의 끝 이 고 스 택 꼭대기 라 고도 합 니 다.스 택 에 대한 작업 은 스 택 에 들 어가 고 스 택 에 들 어 가 는 것 을 삽입 이 라 고 합 니 다. 스 택 에 나 가 는 것 은 마지막 에 삽 입 된 요 소 를 삭제 하 는 것 입 니 다.그래서 스 택 은 LIFO (후진 선 출) 표 라 고도 불 린 다.스 택 은 보통 두 가지 실현 방식 이 있 는데 배열 의 실현 과 링크 가 실현 된다.
다음은 스 택 의 두 개의 애플 리 케 이 션 demo 입 니 다.
문자열 역순
스 택 후진 이 먼저 나 오 는 특성 때문에 스 택 은 문자열 의 역순 에 사용 할 수 있 습 니 다.
public void reverseStr(String str){
     
        Stack stack=new Stack<>();
        for(int i=0;ilength();i++){
     
            char ch =str.charAt(i);
            stack.push(ch);
        }
        StringBuilder stringBuilder =new StringBuilder();
        while(!stack.isEmpty()){
     
            Character ch = stack.pop();
            stringBuilder.append(ch);
        }
        System.out.println(stringBuilder.toString());
    }

파일 데이터 문자 균형
한 파일 에 몇 메 가 크기 가 있 을 수 있 습 니 다. 파일 에 약간의 괄호 가 빠 진 상황 이 발생 할 수 있 습 니 다. 이 때 유용 한 도 구 는 파일 에 있 는 모든 기호 가 쌍 을 이 루 었 는 지 확인 하 는 것 입 니 다.
/**
     * @author L
     *     demo,    ,          。
     */
    public Boolean isValid(File file) throws IOException {
     
        Map map =new HashMap<>();
        map.put('(',')');
        map.put('[',']');
        map.put('{
     ','}');
        map.put('《','》');
        Reader fd =new FileReader(file);
        StringBuilder str=new StringBuilder();
        int len;
        while((len=fd.read()) !=-1){
     
            str.append((char)len);
        }
        Stack stack=new Stack<>();
        for(int i=0;itoString().length();i++){
     
            char cha =str.charAt(i);
            if(map.keySet().contains(cha)){
     
                stack.push(cha);
            }else if(map.values().contains(cha)){
     
                //    ,        value     。
                if(!stack.empty()&&map.get(stack.peek())==cha){
     
                    stack.pop();
                }else{
     
                    return false;
                }
            }
        }
        //       ,         ,       ,      。
        return stack.isEmpty();
    }

테스트
public static void main(String[] args) {
     
        StackDemo stackDemo=new StackDemo();
        String str ="12345678dhbdh";
        stackDemo.reverseStr(str);
        File file=new File("D://1.txt");
        try {
     
            Boolean valid = stackDemo.isValid(file);
            System.out.println(valid);
        } catch (IOException e) {
     
            e.printStackTrace();
        }
    }

테스트 결과
hdbhd87654321
true

결어
반 보 를 쌓 지 않 으 면 천리 까지 갈 수 없다.자신 을 충실하게 하고 자신 을 향상시키다.

좋은 웹페이지 즐겨찾기