자료구조 : 스택(Stack) 연결리스트

ROK·2022년 10월 17일
0

열혈 자료구조

목록 보기
15/30

스택 자료구조 연결리스트로 구현

이번엔 앞서 배열로 구현한 스택 자료구조 형을 연결리스트로 구현한다

앞서 단순 연결리스트를 공부했다면 어려운 문제가 아니다.

헤더파일

#ifndef __LB_STACK_H__
#define __LB_STACK_H__

#define TRUE 1
#define FALSE 0

typedef int Data;

typedef struct _node
{
   Data data;
   struct _node *next;
} Node;

typedef struct _listStack
{
   Node *head;
} ListStack;

typedef ListStack Stack;

void StackInit(Stack *pstack);
int SIsEmpty(Stack *pstack);

void SPush(Stack *pstack, Data data);
Data SPop(Stack *pstack);
Data SPeek(Stack *pstack);

#endif

소스파일

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

void StackInit(Stack *pstack)
{
   pstack->head = NULL;
}

int SIsEmpty(Stack *pstack)
{
   if (pstack->head == NULL)
   {
      return TRUE;
   }
   else
   {
      return FALSE;
   }
}

void SPush(Stack *pstack, Data data)
{
   Node *newNode = (Node *)malloc(sizeof(Node));
   newNode->data = data;

   newNode->next = pstack->head;

   pstack->head = newNode;
}

Data SPop(Stack *pstack)
{
   Data rdata;
   Node *rnode;

   if (SIsEmpty(pstack))
   {
      printf("Stack Memory Error!");
      exit(-1);
   }

   rdata = pstack->head->data;
   rnode = pstack->head;

   pstack->head = pstack->head->next;
   free(rnode);

   return rdata;
}

Data SPeek(Stack *pstack)
{
   if (SIsEmpty(pstack))
   {
      printf("Stack Memory Error!");
      exit(-1);
   }

   return pstack->head->data;
}

메인파일

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

int main()
{
   // Stack 생성 및 초기화
   Stack stack;
   StackInit(&stack);

   // 데이터 넣기
   SPush(&stack, 1);
   SPush(&stack, 2);
   SPush(&stack, 3);
   SPush(&stack, 4);
   SPush(&stack, 5);

   // 데이터 꺼내기
   while (!SIsEmpty(&stack))
   {
      printf("%d ", SPop(&stack));
   }

   return 0;
}

메인파일의 경우는 앞서 배열에서 사용한 메인파일과 동일하다

결과

5 4 3 2 1
profile
하루에 집중하자

0개의 댓글