배열을 이용한 stack
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int* Stack; //데이터를 저장할 장소. 필요한 만큼 동적할당 하기 위해 포인터로 선언함
//스택에 저장할 데이터와 같은 타입의 포인터를 선언하면 이 포인터가 곧 스택이 된다. (int* Stack and int Size)
int Size; //스택의 할당 크기
int Top; //스택의 현재 위치를 가리키는 값이며, 스택이 어디까지 차있는지를 기억한다.
void InitStack(int n)
{
Size = n; //Size크기 만큼 메모리를 할당하여,
Stack = (int*)malloc(sizeof(int) * Size); //Stack 포인터에 대입한다.
//따라서 Stack은 Size크기의 정수형 배열이 되며 Size개의 정수를 저장할 수 있다.
Top = -1; //최초 스택에는 아무런 데이터가 들어있지 않으므로 Top은 비어있다는 뜻인 -1로 초기화한다.
//배열이 0부터 시작하기 때문에 0은 자료가 없는 상태가 아니라 하나 들어있는 상태이므로 비어있는 것과는 다르다.
}
void FreeStack();
{
free(Stack); //스택을 파기화는데 동적할당된 메모리만 해제한다.
}
bool Push(int data) //스택에 데이터를 저장하는 함수. (Top 증가 && Top에 data 대입)
{
if (Top < Size-1){ //Top이 스택의 마지막 요소보다 작을 때만 푸시한다.
Stack[++Top] = data; //데이터가 들어있는 탑을 먼저 1 증가시킨 후, 이 자리에 인수로 전달된 데이터를 집어넣는다.
return true;
}
else
return false; //스택의 크기가 무한하지 않기 때문에 가득 차있으면 false를 리턴한다. => 스택 오버플로우
}
int Pop() //스택에 저장한 값을 빼내는 함수. (Top 위치값 읽기 && Top 1 감소)
{
if (Top >= 0)
return Stack[Top--];
else //(Top<0)
return -1; //스택이 텅 비어서 더 꺼낼 데이터가 없는 상태를 스택 언더플로우라 한다.
}
int main()
{
InitStack(256);
Push(8);
Push(2);
Push(0);
printf("%d\n", Pop()); //0
printf("%d\n", Pop()); //2
printf("%d\n", Pop()); //8
return 0;
}
Author And Source
이 문제에 관하여(배열을 이용한 stack), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@doheeklm/배열을-이용한-stack저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)