찾다
일반적인 문제프로그래머, 당신이 알아야 할 데이터 구조 스택

프로그래머, 당신이 알아야 할 데이터 구조 스택

데이터 구조의 스택은 Java의 스택과 혼동되어서는 안 됩니다. 데이터 구조의 스택은 제한된 선형 목록입니다. 왜냐하면 스택은 마지막으로 삽입된 데이터 항목인 마지막 데이터 항목에만 액세스할 수 있기 때문입니다. 어쩌면 질문이 있을 수도 있습니다. 스택에는 너무 많은 제한이 있으므로 스택 대신 배열이나 연결 목록을 사용하는 것은 어떨까요? 개발 중에는 특정 시나리오가 있으며 특정 시나리오에 따라 데이터 구조를 선택합니다. 브라우저 앞으로 및 뒤로, 문자열 괄호의 적법성 등과 같은 스택에 적용 가능한 시나리오가 많이 있습니다. 스택은 배열 및 연결 목록보다 훨씬 적은 수의 외부 인터페이스를 제공하므로 오류 가능성이 줄어들고 위험 제어 가능성이 향상됩니다.

추천 튜토리얼: PHP 비디오 튜토리얼

스택 구현

스택의 정의에서 스택에는 두 가지 주요 작업이 있음을 알 수 있습니다. 하나는 데이터 조각을 푸싱이라고 하고, 다른 하나는 데이터 조각을 얻는 것인데, 이를 팝핑이라고 합니다. 다음 두 그림은 푸시와 팝의 개략도입니다.

프로그래머, 당신이 알아야 할 데이터 구조 스택

프로그래머, 당신이 알아야 할 데이터 구조 스택

스택을 구현하는 방법에는 두 가지가 있습니다. 하나는 배열을 기반으로 하는 순차 스택이고 다른 하나는 연결된 목록을 기반으로 하는 체인 스택입니다. 다음은 두 스택의 구현 코드입니다.

배열 기반 순차 스택

/**
 * 基于数组的顺序栈
 */
 public class ArrayStack {    // 栈最大容量
    private int maxSzie;    // 存放内容
    private String[] array;    // 栈顶元素
    private int top;    
    public ArrayStack(int size){      
      this.maxSzie = size;        
      this.array = new String[this.maxSzie];        
      this.top = 0;
    }  
      /**
     * 入栈操作
     *
     * @param data 数据
     * @return 0:入栈失败 1:入栈成功
     */
    public int push(String data) {      
      if (top == maxSzie) return 0;
        array[top] = data;
        top++;        
        return 1;
    }    
    /**
     * 出栈操作
     *
     * @return
     */
    public String pop() {     
       if (top == 0) return null;        
       return array[--top];
    }    
    /**
     * 获取栈顶元素
     *
     * @return
     */
    public String peek() {     
       return array[top - 1];
    }    
    /**
     * 判断栈是否为空
     * @return
     */
    public boolean isEmpty() {    
        return top == 0;
    }
}

연결 목록 기반 연결 스택

/**
 * 基于链表的链式栈
 */public class LinkStack {    // 始终指向栈的第一个元素
    private Node top = null;    
    /**
     * 压栈
     *
     * @param data
     * @return
     */
    public int push(String data) {
        Node node = new Node(data);        
        if (top == null) {
            top = node;
        } else {
            node.next = top;
            top = node;
        }       
         return 1;
        }   
     /**
     * 出栈
     *
     * @return
     */
    public String pop() {     
       if (top == null) return null;
        String data = top.getData();
        top = top.next;       
         return data;
    }   
     /**
     * 节点信息
     */
    private static class Node {      
      private String data;      
      private Node next;        
      public Node(String data) {        
          this.data = data;          
          this.next = null;
        }       
      public String getData() {          
        return this.data;
        }
    }
}

스택 구현은 상대적으로 간단합니다. 스택에는 많은 작업이 포함되지 않으며 주로 푸시와 팝이라는 두 가지 작업이 포함됩니다.

스택 적용

문자열 괄호의 합법성 감지

때때로 문자열 괄호의 합법성을 감지해야 합니다. 즉, 왼쪽 괄호는 오른쪽 괄호와 일치해야 합니다. 대괄호, 이를 달성하기 위해 스택을 사용할 수 있습니다. 스택이 법적 괄호에서 사용되는 이유를 이해할 수 있습니까? 대괄호가 합법적으로 사용되는 경우 마지막 왼쪽 대괄호는 첫 번째 오른쪽 대괄호와 일치하고 끝에서 두 번째 왼쪽 대괄호는 두 번째 오른쪽 대괄호와 일치하며 이는 스택의 선입 후 출력 기능과 일치합니다.

  대괄호(), 대괄호 [], 중괄호 {}의 세 가지 유형의 괄호가 있다고 가정합니다. 우리는 대괄호의 유효성을 확인하기 위해 스택을 사용합니다. 왼쪽 괄호를 모두 스택에 밀어 넣고 오른쪽 괄호가 나타나면 일치를 수행합니다. 이때 세 가지 상황이 있습니다.

 ● 스택이 비어 있어 왼쪽 괄호가 없음을 나타냅니다. 괄호는 불법입니다

 ●스택에서 제거됨 왼쪽 괄호가 오른쪽 괄호와 일치하지 않아 괄호 사용이 불법입니다

●스택에서 꺼낸 왼쪽 괄호가 오른쪽 괄호와 일치하여 일시적으로 괄호 사용이 금지됩니다 legal

전체 문자열을 스캔할 때 스택에 값이 남아 있는지 확인하세요. 스택이 비어 있으면 괄호 사용이 허용됩니다. 어쨌든 괄호 사용은 불법입니다.

구현 코드

public static boolean BracketChecker(String data) {
    char[] chars = data.toCharArray();
    ArrayStack stack = new ArrayStack(chars.length);    
    for (char ch : chars) {
            switch (ch){
                        case '{':            
                        case '[':            
                        case '(':
                                stack.push(ch);                
                                break;            
                         case '}':            
                         case ']':            
                         case ')':             
                                if (!stack.isEmpty()){                 
                                   char ch1 = stack.pop();                    
                                   if ((ch=='}' && ch1 !='{')
                                        ||(ch==']' && ch1 !='[')
                                        ||(ch==')' && ch1 !='(')

                    ){                 
                           return false;
                    }
                }else {    
                           return false;
                }     
                break;            
        default:            
            break;
        }
    }   
    return stack.isEmpty();
}

브라우저의 앞으로 및 뒤로 기능

우리 모두는 브라우저가 앞으로 및 뒤로 기능을 할 수 있다는 것을 알고 있으며, 브라우저의 앞으로 및 뒤로 기능도 스택의 특성과 일치합니다. 처음 방문한 웹페이지는 다시 돌아갈 수 있는 마지막 웹페이지여야 합니다. 스택이 이 기능을 어떻게 구현하는지 살펴보겠습니다.

  두 개의 스택을 정의해야 합니다. 처음 방문한 페이지를 첫 번째 스택에 푸시합니다. 뒤로를 클릭하면 첫 번째 스택에서 데이터를 가져와 두 번째 스택에 넣습니다. , 두 번째 스택에서 데이터를 가져와 첫 번째 스택에 넣습니다. 첫 번째 스택에 데이터가 없으면 뒤로 가기 위해 클릭할 페이지가 없다는 뜻이고, 두 번째 스택에 데이터가 없으면 클릭해서 앞으로 이동할 페이지가 없다는 의미입니다. 이러한 방식으로 스택을 통해 브라우저의 앞으로 및 뒤로 기능을 구현합니다.

위 내용은 프로그래머, 당신이 알아야 할 데이터 구조 스택의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 博客园에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Deepseek 웹 버전 공식 입구Deepseek 웹 버전 공식 입구Mar 12, 2025 pm 01:42 PM

국내 AI Dark Horse Deepseek은 글로벌 AI 산업에 충격을 주면서 강력하게 증가했습니다! 1 년 반 동안 단지 설립 된이 중국 인공 지능 회사는 무료 및 오픈 소스 모형 인 DeepSeek-V3 및 DeepSeek-R1에 대해 글로벌 사용자로부터 광범위한 칭찬을 받았습니다. DeepSeek-R1은 이제 OpenAIO1의 공식 버전과 비교할 수있는 성능으로 완전히 출시되었습니다! 웹 페이지, 앱 및 API 인터페이스에서 강력한 기능을 경험할 수 있습니다. 다운로드 방법 : iOS 및 Android 시스템을 지원하면 사용자가 App Store를 통해 다운로드 할 수 있습니다. Deepseek 웹 버전 공식 입구 : HT

DeepSeek의 바쁜 서버 문제를 해결하는 방법DeepSeek의 바쁜 서버 문제를 해결하는 방법Mar 12, 2025 pm 01:39 PM

DeepSeek : 서버와 혼잡 한 인기있는 AI를 처리하는 방법은 무엇입니까? 2025 년 핫 AI로서 DeepSeek은 무료이며 오픈 소스이며 OpenAIO1의 공식 버전과 비교할 수있는 성능을 가지고 있으며, 이는 인기를 보여줍니다. 그러나 높은 동시성은 서버 바쁜 문제를 가져옵니다. 이 기사는 이유를 분석하고 대처 전략을 제공합니다. DeepSeek 웹 버전 입구 : https://www.deepseek.com/deepseek 서버 바쁜 이유 : 높은 동시 액세스 : DeepSeek의 무료 및 강력한 기능은 동시에 많은 사용자를 유치하여 과도한 서버로드를 초래합니다. 사이버 공격 : DeepSeek은 미국 금융 산업에 영향을 미친다 고보고되었습니다.

심층적 인 검색 DeepSeek 공식 웹 사이트 입학심층적 인 검색 DeepSeek 공식 웹 사이트 입학Mar 12, 2025 pm 01:33 PM

2025 년 초, 국내 AI "Deepseek"은 놀라운 데뷔를했습니다! 이 무료 및 오픈 소스 AI 모델은 OpenAI의 O1의 공식 버전과 비교할 수있는 성능을 가지고 있으며 웹 측, 앱 및 API에서 완전히 출시되어 iOS, Android 및 웹 버전의 다중 터미널 사용을 지원합니다. DeepSeek 공식 웹 사이트 및 사용 지침의 심도있는 검색 : 공식 웹 사이트 주소 : https://www.deepseek.com/using 웹 버전 : 위의 링크를 클릭하여 DeepSeek 공식 웹 사이트를 입력하십시오. 홈페이지에서 "대화 시작"버튼을 클릭하십시오. 먼저 사용하려면 휴대폰 확인 코드와 함께 로그인해야합니다. 로그인 한 후 대화 인터페이스를 입력 할 수 있습니다. DeepSeek은 강력하고 코드를 작성하고 파일을 읽고 코드를 만들 수 있습니다.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음