스 택 의 배열 구현
배열 이 실 현 된 스 택 에 있어 서 스 택 에 들 어가 거나 스 택 을 나 가 는 것 은 매우 빠 릅 니 다. 어떤 기계 에 서 는 자체 증가 와 자체 주소 지정 기능 을 가 진 레지스터 에서 작업 하면 (정수) push 와 pop 은 모두 기계 명령 으로 쓸 수 있 습 니 다.가장 현대 화 된 컴퓨터 는 스 택 작업 을 명령 시스템 의 일부분 으로 하고 스 택 은 컴퓨터 에서 매우 기본 적 인 데이터 구조 이다.
stack.h
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
typedef int ElementType;
struct StackRecord;
typedef struct StackRecord *Stack;
int IsEmpty(Stack S);
int IsFull(Stack S);
Stack CreateStack(int MaxElements);
void DisposeStack(Stack S); //
void MakeEmpty(Stack S); //
void Push(Stack S, ElementType X);
ElementType Top(Stack S); //
void Pop(Stack S); //
ElementType TopAndPop(Stack S); //
#endif // STACK_H_INCLUDED
stack.c
#include"stack.h"
#include"..\fatal.h"
#include
#include
#define EmptyTOS (-1)
#define MinStackSize (5)
struct StackRecord{
int Capacity; // ,
int TopOfStack; //
ElementType *Array; //
};
int IsEmpty(Stack S){
return S->TopOfStack == EmptyTOS;
};
int IsFull(Stack S){
return S->TopOfStack == S->Capacity - 1;
}
Stack CreateStack(int MaxElements){
Stack S;
if(MaxElements < MinStackSize)
Error("Stack Size is too small.");
S = malloc(sizeof(struct StackRecord));
if(S == NULL)
FatalError("Out of Space!!");
S->Array = malloc(sizeof(ElementType) * MaxElements);
if(S->Array == NULL)
FatalError("Out of space!!");
S->Capacity = MaxElements;
MakeEmpty(S);
return S;
}
void MakeEmpty(Stack S){
S->TopOfStack = EmptyTOS;
}
void DisposeStack(Stack S){
if(S != NULL){
free(S->Array);
free(S);
}
}
void Push(Stack S, ElementType X){
if(IsFull(S))
Error("Full Stack");
else
S->Array[++S->TopOfStack] = X;
}
void Pop(Stack S){
if(IsEmpty(S))
Error("Empty Stack");
else
S->TopOfStack--;
}
ElementType Top(Stack S){
if(IsEmpty(S))
Error("Empty Stack");
else
return S->Array[S->TopOfStack];
}
ElementType TopAndPop( Stack S )
{
if( !IsEmpty( S ) )
return S->Array[ S->TopOfStack-- ];
Error( "Empty stack" );
return 0; /* Return value used to avoid warning */
}
int main(){
Stack S = CreateStack(10);
// Push()
Push(S,1);
Push(S,2);
// Top()
printf("%d
",Top(S));
// Pop()
Pop(S);
printf("%d
",Top(S));
DisposeStack(S);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.