헤더
#ifndef _stack#define _stacktypedef struct _node{int data;struct _node* next;}Node;typedef struct _stack{Node* head;int numOfData;}Stack;void DataInit(Stack* pstack);int Menu(int* SMenu);int Push(Stack* pstack);int Peek(Stack* pstack);int Pop(Stack* pstack);#endif
소스
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<malloc.h>#include"head.h"void DataInit(Stack* pstack){pstack->head = NULL;pstack->numOfData = 0;printf("데이터 초기화 완료\n\n");}int Menu(int *pSMenu){printf("1.숫자 추가\n");printf("2.마지막으로 들어간 숫자 확인\n");printf("3.마지막으로 들어간 숫자 삭제\n");printf("4.종료\n");scanf("%d",pSMenu);return 1;}int Push(Stack*pstack){int InData;printf("추가할 숫자를 입력하시오\n");scanf("%d", &InData);Node* newStack = (Node*)malloc(sizeof(Node));newStack->data = InData;newStack->next = pstack->head;pstack->head=newStack;(pstack->numOfData)++;printf("추가 완료\n");return 1;}int Peek(Stack* pstack){if(pstack->numOfData == 0)printf("데이터가 없습니다\n");elseprintf("가장 위에 있는 숫자는 %d, 저장된 숫자의 개수는%d\n", pstack->head->data,pstack->numOfData);return 1;}int Pop(Stack* pstack){if (pstack->numOfData == 0)printf("데이터가 없습니다");else{int bData = pstack->head->data;Node* bNode = pstack->head;pstack->head = pstack->head->next;(pstack->numOfData)--;printf("삭제 완료\n");}return 1;}
메인
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<malloc.h>#include"head.h"int main(){Stack stack;int SMenu=0;DataInit(&stack);while (SMenu!=4){Menu(&SMenu);//숫자 추가(push)if (SMenu == 1){Push(&stack);}//숫자 확인(peek)else if (SMenu == 2){Peek(&stack);}//숫자 삭제(pop)else if (SMenu == 3){Pop(&stack);}}return 1;}
예제에서는 empty체크를
int SIsEmpty(Stack * pstack){if(pstack->head == NULL)return TRUE;elsereturn FALSE;}
이 함수를 쓰던데 저는 그냥 stack 구조체에 변수추가해서 숫자 추가할때 마다 1씩 올라가게 해봤는데
두방식의 차이점이 있나요?
그리고
void DataInit(Stack* pstack)이 함수를 반환형을 int로 해서 return 1;로 끝냈는데 반환형식으로만 구분되는 함수를 오버로드 할 수 없다고 뜨던데 무슨말인가요?
스택 관련 자료도 추천해주시면 감사하겠습니다.