Dolphins의 HelloWorld

Stack 본문

Algorithm/알고리즘 개념

Stack

돌핀's 2018. 6. 25. 22:37

스택은 먼저들어간 것이 마지막에 나오는 자료구조로


흔히 LIFO(Last-in,First-out)이라고 부른다.



이 기능들을 하는 함수들을 통해 스택을 구현해보았다.


헤더파일

#ifndef __STACK_H__
#define __STACK_H__

#define SIZE 100

typedef struct _stack {
	int topindex; //스택의 맨위를 가르키는 변수
	int arr[SIZE]; 
}Stack;

void StackInit(Stack* stack) //스택 초기화
{
	stack->topindex = -1; //아무것도 없는경우 top은 -1
}
void StackPush(Stack* stack, int data) { //스택에 데이터를 집어넣는 함수
	stack->topindex++; //stack에 data를 집어넣을 것이므로 topindex를 하나 증가시킴
	stack->arr[stack->topindex] = data; //스택에 데이터 삽입.
}
int isEmpty(Stack *stack) { //스택이 비어있으면 1 아니면 0을 반환
	if (stack->topindex == -1)
		return 1;
	else
		return 0;
}
int pop(Stack* stack) { //스택의 데이터를 반환하면서 
	if (isEmpty(stack)) //만약 스택에 아무것도 없다면 -1반환
		return -1;
	int data = stack->arr[stack->topindex]; //맨 위에있는 숫자를 data변수에 저장
	stack->topindex--; //top을 아래로 한칸 내림

	return data; //맨 위에 있던 수 반환
}
int Peek(Stack* stack) { //마지막에 저장된 요소 반환
	if (isEmpty(stack)) //비어있다면 -1반환
		return -1;
	return stack->arr[stack->topindex];
}
#endif


main

#include <stdio.h>
#include "stack.h"

int main()
{
	Stack stack;

	StackInit(&stack);

	StackPush(&stack,1); StackPush(&stack, 3);
	StackPush(&stack,2); StackPush(&stack, 4);
	StackPush(&stack,5);

	printf("%d\n", pop(&stack));
	printf("%d\n", pop(&stack));

	printf("%d\n", Peek(&stack));

	printf("%d\n", pop(&stack));
	printf("%d\n", pop(&stack));
	printf("%d\n", pop(&stack));
	printf("%d\n", pop(&stack));
}


결과



Comments