순차 스택, 즉 스택 저장 구조는 순차 테이블로 구현된다. 이전 연구를 통해 스택 저장 구조를 사용하여 데이터 요소를 작동하려면 "선입선출"의 원칙을 준수해야 함을 알았습니다. 다음은 "시퀀스 테이블을 사용하여 스택을 시뮬레이션하고 기본 작업을 구현하는 방법입니다. 스택의 데이터에 대해(팝핑 및 푸시)" 자세한 소개를 제공합니다.
시퀀스 테이블(기본 구현은 배열임)과 스택 구조를 주의 깊게 관찰하면 스택이 데이터 액세스 프로세스에 특별한 제한이 있다는 점을 제외하면 데이터를 저장하는 방식이 매우 유사하다는 것을 알 수 있습니다. 하지 않습니다.
예를 들어 먼저 순차 테이블(배열)을 사용하여 저장 {1,2,3,4}
하고 저장 상태는 아래 그림과 같습니다.
마찬가지로 스택 저장 구조를 사용하여 저장하면 {1,2,3,4}
저장 상태가 다음 그림에 표시됩니다.
위의 두 그림을 비교하면 스택 구조를 모사하기 위해 시퀀스 테이블을 사용하는 것이 매우 간단하고 a 배열의 첨자가 있는 위치부터 순서대로 데이터를 저장하기만 하면 된다는 것을 어렵지 않게 알 수 있습니다. 0입니다.
첨자가 0인 시뮬레이션 스택에서 데이터를 저장하는 것이 일반적인 방법입니다. 배열의 다른 첨자에서 데이터를 저장하는 것도 가능합니다. 이것은 초보자가 이해하기 위한 것입니다.
데이터를 저장하기 위한 시퀀스 테이블 시뮬레이션 스택을 이해한 후 스택에서 요소를 팝핑하는 작업을 시뮬레이션하는 방법을 살펴보겠습니다. 스택은 요소를 저장하는 순서에 대해 "선입, 후출"의 요구 사항이 있으므로 그림 1에 저장된 요소 1을 스택에서 제거하려면 요소 4, 요소 3 및 요소 2를 스택에서 제거해야 합니다. 차례로 쌓는다.
다음은 스택 저장 구조를 시뮬레이트하기 위해 시퀀스 테이블을 사용하는 일반적인 구현 아이디어입니다. top의 초기 값은 -1이며 스택 데이터 요소에 저장소가 없음을 나타내며 스택은 "빈 스택"입니다. 데이터 요소가 스택에 푸시되면 top은 +1 작업을 수행하고 데이터 요소가 팝되면 top은 -1 작업을 수행합니다.
순차적 스택 요소 "푸시됨"
예를 들어, 여전히 스택 스토리지를 시뮬레이션하는 프로세스입니다 {1,2,3,4}
. 처음에 스택은 "빈 스택"입니다. 즉, 다음 그림과 같이 배열이 비어 있고 맨 위 값은 초기 값 -1입니다.
먼저 원소 1을 스택에 추가하고 기본적으로 배열의 첨자는 0으로 스택의 최하위를 의미하므로 배열 a[1]에 원소 1을 저장하고 최상위 값은 +1, 아래 그림과 같이:
위의 방법을 사용하여 요소 2, 3, 4를 차례로 저장하면 다음 그림과 같이 최종적으로 상위 값이 3이 됩니다.
따라서 C 언어 구현 코드는 다음과 같습니다.
//元素elem进栈,a为数组,top值为当前栈的栈顶位置
int push(int* a,int top,int elem){
a[++top]=elem;
return top;
}
코드에서 a[++top]=elem은 ++top을 먼저 실행한 다음 a[top]=elem을 실행하는 것과 같습니다.
순차 스택 요소 "팝"
사실, 상위 변수의 설정은 시뮬레이션된 데이터의 "스택" 작업에 실질적인 도움이 되지 않으며 데이터의 "스택 외부" 작업에 대비하는 것입니다.
예를 들어 위의 그림에서 요소 2를 스택에서 꺼내려면 요소 4와 요소 3을 스택에서 먼저 꺼내야 합니다. 스택 밖에 데이터가 있을 때 top은 -1로 설정되어야 합니다. 따라서 요소 4와 요소 3의 팝핑 프로세스는 각각 다음 그림 a)와 b)에 나와 있습니다.
위의 배열에서 요소가 사라지는 것은 초보자의 편의를 위한 것일 뿐이며, 사실 여기에서는 최상위 값 자체가 스택의 최상위 위치를 나타내므로 여기서는 최상위 값에 -1 연산만 수행하면 됩니다. -1은 스택 맨 위에 있는 요소를 팝하는 것과 같습니다. 그리고 나중에 스택에 요소를 추가할 때 요소 4와 같이 이전 요소의 위치에 새 요소가 저장되고 이전 요소를 덮어씁니다.
요소 4와 3을 모두 팝한 후 요소 2를 팝할 수 있습니다. 따라서 시퀀스 테이블을 사용하여 데이터 팝업 작업을 시뮬레이션하기 위한 C 언어 구현 코드는 다음과 같습니다.
//数据元素出栈
int pop(int * a,int top){
if (top==-1) {
printf("空栈");
return -1;
}
printf("弹栈元素:%d\n",a[top]);
top--;
return top;
}
코드의 if 문은 사용자가 "스택에 데이터가 없지만 스택에서 데이터를 팝해야 합니다"라는 잘못된 작업을 수행하지 않도록 방지하기 위한 것입니다. 코드에서 스택의 요소 팝핑을 구현하려면 최상위 값 -1만 필요합니다.
요약하다
시퀀스 테이블을 학습하고 스택 안팎의 데이터 작업을 시뮬레이션함으로써 초보자는 시퀀스 스택 연구를 완료했습니다. 다음은 시퀀스 스택의 전체 코드와 C 언어의 데이터에 대한 기본 작업입니다.
#include <stdio.h>
//元素elem进栈
int push(int* a,int top,int elem){
a[++top]=elem;
return top;
}
//数据元素出栈
int pop(int * a,int top){
if (top==-1) {
printf("空栈");
return -1;
}
printf("弹栈元素:%d\n",a[top]);
top--;
return top;
}
int main() {
int a[100];
int top=-1;
top=push(a, top, 1);
top=push(a, top, 2);
top=push(a, top, 3);
top=push(a, top, 4);
top=pop(a, top);
top=pop(a, top);
top=pop(a, top);
top=pop(a, top);
top=pop(a, top);
return 0;
}
프로그램의 출력은 다음과 같습니다.
弹栈元素:4
弹栈元素:3
弹栈元素:2
弹栈元素:1
空栈
2023년 신버전 데이터 구조 및 알고리즘 자바 동영상 강좌(1부), 시니어 자바 프로그래머가 배워야 할 데이터 구조 및 알고리즘 2023년 신버전 데이터 구조
및 알고리즘 자바 동영상 강좌(2부), 자바 시니어 프로그래머가 배워야 할 데이터 구조 및 알고리즘 배워야 한다