본문 바로가기

Programings/Data Structs

[Data Struct] 스택 (Stack) - 링크드 리스트를 이용한 스택

반응형

스택은 쌓다의 의미

모든 스택의 공통점

LIFO 형식 (Last in First out)
Pop() - 스택에서 꺼내는 함수
Push() - 스택에 넣는 함수

링크드 리스트를 사용 할 수 있고 배열을 사용 할 수도 있다.


#include <stdio.h>
#include <stdlib.h>

typedef struct _NODE {
	int Data;
	struct _NODE *Next;
} NODE;

NODE *head, *end;
NODE *ptrNode;

void InitializeStack(void);
void Push(int);
void DisplayStack(void);
int Pop(void);

int main()
{
	int ret;
	InitializeStack();

	Push(1);
	Push(3);
	Push(10);
	Push(20);
	Push(12);

	printf("다섯 번의 Push() 함수의 호출 후 실행 결과\n");
	DisplayStack();

	ret=Pop();
	ret=Pop();
	ret=Pop();

	printf("\n세 번의 Pop() 함수의 호출 후 실행 결과 \n");
	DisplayStack();
	return 0;
}

/* 스택 초기화 함수 */
void InitializeStack(void)
{
	head = (NODE *)malloc(sizeof(NODE));
	end = (NODE *)malloc(sizeof(NODE));

	head -> Next=end;
	end -> Next=end;
}

void Push(int num)
{
	ptrNode = (NODE *)malloc(sizeof(NODE));
	ptrNode->Data = num;
	ptrNode->Next=head->Next;
	head->Next = ptrNode;
}

int Pop(void)
{
	int ret;

	ptrNode = head ->Next;
	head ->Next = head ->Next ->Next;
	ret=ptrNode ->Data;

	free(ptrNode);

	return ret;
}

void DisplayStack(void)
{
	NODE *indexNode;
	printf("head -> ");
	for(indexNode=head->Next; indexNode !=end; indexNode = indexNode ->Next)
	printf("%d -> ", indexNode ->Data);
	printf("end");

}


스택 계산기( 가로 포함 계산)


스택 계산기

반응형