linkedlistStack.cpp
linkedlistStack.h
배열로 구현한 Stack에 이어서 오늘은 LinkedList로 구현한 Stack을 구현하겠습니다~
배열로 구현한 Stack와 다른점은 maxElementcount가 없습니다. 즉, 링크 주소만 쭉 연결해주면 제한이 없다는 점입니다.
linkedlistStack.h
#ifndef _LINKED_STACK_
#define _LINKED_STACK_
typedef struct StackNodeType
{
int data;
struct StackNodeType* pLink;
}StackNode;
typedef struct LinkedListStack
{
int currentElementCount;
StackNode* pTopElement;
}LinkedStack;
LinkedStack* createLinkedStack();
int pushLS(LinkedStack* pStack, StackNode element);
StackNode* popLS(LinkedStack* pStack);
StackNode* peekLS(LinkedStack* pStack);
void deleteLinkedListStack(LinkedStack* pStack);
int isLinkedStackFull(LinkedStack* pStack);
int isLinkedStakEmpty(LinkedStack* pStack);
void displayLinkedStack(LinkedStack* pStack)
#endif
#ifndef _COMMON_STACK_DEF
#define _COMMON_STACK_DEF
#define TRUE 1
#define FALSE 0
#endif
linkedlistStack.cpp
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "linkedlistStack.h"
LinkedStack* createLinkedStack()
{
LinkedStack* pReturn = NULL;
pReturn = (LinkedStack*) malloc(sizeof(LinkedStack));
if(pReturn != NULL)
{
memset(pReturn, 0, sizeof(LinkedStack));
}
else
{
printf("pReturn memory malloc error\n");
return NULL;
}
return pReturn;
}
int pushLS(LinkedStack* pStack, StackNode element)
{
int ret = FALSE;
int i;
StackNode *pNode = NULL;
if(pStack != NULL)
{
pNode = (StackNode*) malloc(sizeof(StackNode));
if(pNode != NULL)
{
memset(pNode, 0, sizeof(StackNode));
*pNode = element;
pNode->pLink = pStack->pTopElement;
pStack->pTopElement = pNode;
pStack->currentElementCount++;
ret = TRUE;
}
else
{
printf("메모리 할당 오류\n");
}
}
return ret;
}
StackNode* popLS(LinkedStack* pStack)
{
StackNode *pReturn = NULL;
pReturn = (StackNode*) malloc(sizeof(StackNode));
if(pStack != NULL)
{
if(!isLinkedStakEmpty(pStack))
{
pReturn = pStack->pTopElement;
pStack->pTopElement = pReturn->pLink;
pReturn->pLink = NULL;
pStack->currentElementCount --;
}
}
}
StackNode* peekLS(LinkedStack* pStack)
{
StackNode *pReturn = NULL;
pReturn = (StackNode*) malloc(sizeof(StackNode));
if(pStack != NULL)
{
if(!isLinkedStakEmpty(pStack))
{
pReturn = pStack->pTopElement;
}
}
}
void deleteLinkedListStack(LinkedStack* pStack)
{
StackNode* pNode = NULL;
StackNode* pDelNode = NULL;
if(pStack!=NULL)
{
pNode = pStack->pTopElement;
while(pNode != NULL)
{
pDelNode = pNode;
pNode = pDelNode->pLink;
free(pDelNode);
}
free(pStack);
}
}
int isLinkedStackFull(LinkedStack* pStack)
{
int ret = FALSE;
return ret;
}
int isLinkedStakEmpty(LinkedStack* pStack)
{
int ret = FALSE;
if(pStack != NULL)
{
if(pStack->currentElementCount == 0)
{
ret = TRUE;
}
}
return ret;
}
void displayLinkedStack(LinkedStack* pStack)
{
StackNode* pNode = NULL;
int i = 1;
if(pStack != NULL)
{
printf("현재 노드 갯수 : %d\n", pStack->currentElementCount);
pNode = pStack->pTopElement;
while(pNode!= NULL)
{
printf("[%d] - [%d]\n", pStack->currentElementCount-i, pNode->data);
pNode = pNode->pLink;
i++;
}
}
}
main.cpp
#include <stdio.h>
#include <stdlib.h>
#include "linkedlistStack.h"
int main()
{
LinkedStack* pStack = NULL;
StackNode* pNode = NULL;
int i;
pStack = createLinkedStack();
if(pStack!= NULL)
{
StackNode node;
for(i=1; i<10; i++)
{
node.data = i;
node.pLink = NULL;
pushLS(pStack, node);
}
displayLinkedStack(pStack);
}
return 0;
}
충분히 이해가 가실껍니다~