Programming/C,C++
LinkedList로 구현한 Stack
홍열
2012. 10. 28. 14:08
728x90
배열로 구현한 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;
- }
충분히 이해가 가실껍니다~