이러한 중요한 방법을 설명하면 스택 클래스의 최종 구현을 살펴 보겠습니다:
푸시 및 팝 방법은 예상대로 정확하게 나타납니다(라인 13-32). 푸시 방법을 사용하여 일부 가변 값(7-11 행)을 가진 사용자 지정 이니셜 라이저를 만들 수 있습니다. 또한 루트 노드에 값(34-36 행)이 있고 다음 속성(38-44 행)을 통해 노드에 액세스 할 수있는 한 목록을 반복하는 기본 인쇄 방법이 있는지 확인하여 빈 스택을 확인할 수 있습니다.
스택 기능의 기본 테스트는 다음과 같습니다:
스택을 구현하는 방법을 아는 것이 한 가지이지만 더 중요한 것은 스택이 적합한 상황을 인식하는 것입니다. 이 다음 섹션에서 우리는 세 가지 경우에 볼 것이다.
사용 사례 1: 반전 순서
스택의 순서가 고정되어 있기 때문에 요소를 한 스택에서 즉시 다른 스택으로 터뜨리면 역 순서를 매우 쉽게 얻을 수 있습니다. 아니 교환 인덱스와 장난 없습니다!
사용 사례 2:대칭 테스트
스택의 또 다른 좋은 사용 사례는 대칭 테스트입니다. 아래 예제에서는 괄호 문자열을 테스트하여 각 닫는 괄호가 이전 여는 괄호의 올바른 대응인지 확인합니다.
우리는 문자의 홀수가 비대칭(라인 6)에 의해 즉시 것 같은 문자 수는 2 로 나눌 수 있는지 확인하여 시작합니다. 다음으로 잘못된 문자의 문자 집합을 정의한 다음 입력 문자열에 잘못된 문자(7-8 행)의 범위가 있는지 확인하여 유효한 입력이 있는지 확인합니다. 닫는 괄호와 여는 괄호가 일치하는지 확인하기 위해 키-값 쌍(10 행)으로 사전에 넣습니다. 다른 상황에서는 사전에 쌍을 저장하지 않고도 역 값을 계산할 수 있습니다. 그런 다음 스택(11 행)이 있습니다. 이 경우 스택의 목적은 여는 괄호를 저장하는 것입니다. 우리는 우리의 문자열을 통해 반복으로 우리의 문자가 우리의 사전에서 키 인 경우 테스트하여 여는 괄호 인 경우 우리는 확인할 수 있습니다. 이 경우,우리는 우리의 스택에 밀어. 일단 우리가 우리의 첫번째 닫히는 부류를 찾아내면,우리는 우리가 우리의 본의 후반부를 통해서 일하고 있다는 것을 알고 있습니다,그래서 우리는 틀린(선 12)에 우리의 첫번째 절반 부울을 놓았습니다. 이 시점 이후에 더 이상 여는 괄호를 찾으면 부울을 확인하고 실패한 테스트를 나타낼 수 있습니다. 각 닫는 브래킷에 대해 마지막 여는 브래킷을 팝업하고 올바른 키-값 쌍인지 확인합니다. 다시 한번,우리는 단지 한 번 문자열을 반복 할 필요가,그래서 우리는 선형 알고리즘에서 값을 많이 받고있다.
사용 사례 3:명령 실행 취소
마지막으로 명령 패턴과 함께 스택을 사용하여 실행 취소 기록을 만듭니다. 시작하려면 간단한 은행 계좌 개체를 살펴 보겠습니다. 잔액과 당좌 대월 한도가 있으며 자금을 입금 및 인출하는 몇 가지 간단한 방법이 있습니다:
입금 및 인출 방법을 직접 호출하는 대신 관련 정보를 명령에 저장할 수 있습니다. 아래의 스 니펫에서 열거 형 속성(입금 또는 인출)과 금액으로 수행 할 작업의 종류를 지정합니다. 또한 명령을 실행할 수 있는지 여부를 나타 내기 위해 부울을 저장합니다(4-11 행). 출금 요청이 당좌 대월 한도를 초과하면 은행 계좌에 아무 일도 일어나지 않으며 성공한 부울은 거짓으로 유지되며 그렇지 않으면 명령이 완료되면 사실이 될 것입니다(18-26 행). 우리는 명령을 호출하거나 실행 취소하는 두 가지 방법을 가지고 있으며,각각 은행 계좌를 인수로 사용합니다(18&28 행). 이 방법은 은행 계좌를 가지고 우리가 이전 조각에서 본 인스턴스 메서드를 호출합니다.
은행 계좌로 돌아가서,우리는 이제 우리의 명령 스택 속성을 소개 할 수 있습니다. 우리는 예금 및 인출 방법을 파일 비공개로 표시하여 은행 계좌 명령(62&66 행)에서만 액세스 할 수 있도록합니다. 이제 프로세스(명령:)와 명령 취소()의 두 가지 노출 된 방법이 있습니다. 첫 번째는 명령을 입력으로 받아들이고 은행 계좌를 입력으로 실행 한 다음 명령을 스택에 푸시합니다. 한편 실행 취소 명령 메서드는 스택에서 마지막 명령을 팝업하고 실행 취소(51-60 행)를 수행합니다.
이것은 매우 간단한 패턴이며 매우 강력한 패턴입니다. 가능한 응용 프로그램은 무한하고 만족스러운 사용자 경험을합니다.
그리고 지금 행동 패턴을 보자:
마무리
이 글에서,우리는 스택과 리포 동작의 개념을 탐구. 우리는 이중 연결된 목록을 사용하여 자체 스택을 구현하고 스택의 크기가 변경 될 때 메모리를 할당 및 할당 취소하는 방법을 보여주었습니다. 또한 스택에 대한 세 가지 일반적인 사용 사례 인 반전,대칭 테스트 및 실행 취소를 살펴 보았습니다. 이 세 가지 상황은 각각 실제 프로젝트에서 셀 수없이 많이 발생합니다. 나는 당신이 그 필요를 처리하기위한 적절한 구조로 스택을 생각할 수 있기를 바랍니다. 언제나처럼,읽어 주셔서 감사합니다!