이번엔 앞서 배열로 구현한 스택 자료구조 형을 연결리스트로 구현한다
앞서 단순 연결리스트를 공부했다면 어려운 문제가 아니다.
#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