데이터 구조 와 알고리즘 1 스 택 의 실현
3411 단어 데이터 구조 와 알고리즘
우선, 우 리 는 창고 의 의 미 를 이해 해 야 한다.스 택 은 특정한 저장 소 나 레지스터 로 한쪽 은 고정 되 어 있 고 다른 한쪽 은 유동 적 이다.이 저장 소 에 저 장 된 데 이 터 는 특수 한 데이터 구조 이다.모든 데 이 터 를 저장 하거나 꺼 내 면 움 직 이 는 한 끝 (스 택 꼭대기 라 고 함) 에서 만 진행 할 수 있 고 '선진 후 출' 의 원칙 에 따라 엄 격 히 액세스 할 수 있 습 니 다. 그 중에서 있 는 요 소 는 스 택 상부 (후 입 스 택 자) 의 여러 요소 가 하나씩 이동 한 후에 야 꺼 낼 수 있 습 니 다.
2. 스 택 구조 체 의 기본 형태
typedef struct Stack{
T* m_vect; //
size_t size; //
size_t index;//
}Stack;
이상 은 스 택 구조 체 의 기본 구성 부분 입 니 다.
3. 스 택 에 포 함 된 헤더 파일 구현
#include
#include
#include
4. 스 택 의 주요 관련 함수
//
void init(Stack *stack,size_t size);
// data
void push(Stack *stack,T data);
//
T pop(Stack *stack);
//
T peek(Stack *stack);
//
bool isEmpty(Stack *stack);
//
size_t getCnt(Stack *stack);
//
size_t getSize(Stack *stack);
//
bool isFull(Stack *stack);
//
void clear(Stack *stack);
//
void destroy(Stack *stack);
//
void travel(Stack *stack);
5. 관련 함수 의 실현
// , T int
typedef int T;
//
void init(Stack *stack,size_t size){
stack->m_vect = calloc(size,sizeof(T));
stack->size = size;
stack->index = 0;
}
// data
void push(Stack *stack,T data){
stack->m_vect[stack->index] = data;
stack->index++;
}
//
T pop(Stack *stack){
return stack->m_vect[--stack->index];
}
//
T peek(Stack *stack){
return stack->m_vect[stack->index-1];
}
//
bool isEmpty(Stack *stack){
return stack->index == 0;
}
//
size_t getCnt(Stack *stack){
return stack->index;
}
//
size_t getSize(Stack *stack){
return stack->size;
}
//
bool isFull(Stack *stack){
return stack->size == stack->index;
}
//
void destroy(Stack *stack){
if(stack->m_vect != NULL){
free(stack->m_vect);
stack->m_vect = NULL;
}
}
//
void clear(Stack *stack){
while(!isEmpty(stack)){
pop(stack);
}
}
//
void travel(Stack *stack){
for(int i=0;iindex;i++){
printf("%d ",stack->m_vect[i]);
}
printf("
");
}
6. 스 택 진급 기능
brr 가 arr 인지 아 닌 지 를 스 택 에 들 어 가 는 순서 로 판단 합 니 다.
bool isOutOfStack(T arr[],T brr[],size_t len){
Stack s;
init(&s,len);
int j = 0;// brr[]
for(int i=0;i
7. 창고 의 사용 예시
int main(){
Stack s;
init(&s,10);
push(&s,5);
push(&s,3);
push(&s,2);
int x = pop(&s);
printf("%d
",x);
x = pop(&s);
printf("%d
",x);
push(&s,10);
x = pop(&s);
printf("%d
",x);
destroy(&s);
int arr[5] = {1,2,3,4,5};
int brr[5] = {5,4,3,1,2};
if(isOutOfStack(arr,brr,5)){
printf("
");
}else{
printf("
");
}
return 0;
}
8. 주의사항
스 택 의 크기 가 제한 되 어 있 으 며 스 택 을 만 들 때 확 정 된 것 임 을 주의해 야 합 니 다.스 택 의 본질은 선진 적 인 후에 나 오 는 방식 에 따라 고정된 크기 의 공간 에 데 이 터 를 저장 하고 읽 는 것 이지 링크 처럼 더 큰 메모리 공간 을 신청 하여 데 이 터 를 저장 하 는 것 이 아니 라 본질 적 으로 다르다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.