컴공 일기106
게시글 주소: https://orbi.kr/00057433112
LinkedList 를 이용해서 Stack을 구현한 예제입니다. 이건 논리적인 부분이 굉장히 중요한 것 같습니다.
자칫 잘못하면 Segmentation fault가 뜨기 때문에 주의 또 주의...
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tagNode
{
char* Data;
struct tagNode* NextNode;
}Node;
typedef struct tagLinkedListStack
{
Node* List;
Node* Top;
}LinkedListStack;
bool LLS_IsEmpty(LinkedListStack* Stack)
{
return (Stack->List == NULL);
}
void LLS_CreateStack(LinkedListStack** Stack)
{
(*Stack) = (LinkedListStack*)malloc(sizeof(LinkedListStack));
(*Stack)->List = NULL;
(*Stack)->Top = NULL;
}
Node* LLS_CreatNode(const char* NewData)
{
Node* NewNode = (Node*)malloc(sizeof(Node));
NewNode->Data = (char*)malloc(strlen(NewData) + 1);
strcpy(NewNode->Data, NewData);
NewNode->NextNode = NULL;
return NewNode;
}
void LLS_DestroyNode(Node* _Node)
{
free(_Node->Data);
free(_Node);
}
void LLS_Push(LinkedListStack* Stack, Node* NewNode)
{
if (Stack->List == NULL)
{
Stack->List = NewNode;
}
else
{
Node* OldTop = Stack->List;
while (OldTop->NextNode != NULL)
{
OldTop = OldTop->NextNode;
}
OldTop->NextNode = NewNode;
}
Stack->Top = NewNode;
}
Node* LLS_Pop(LinkedListStack* Stack)
{
Node* TopNode = Stack->Top;
if (Stack->List == Stack->Top)
{
Stack->List = NULL;
Stack->Top = NULL;
}
else
{
Node* CurrentTop = Stack->List;
while (CurrentTop != NULL && CurrentTop->NextNode != Stack->Top)
{
CurrentTop = CurrentTop->NextNode;
}
Stack->Top = CurrentTop;
CurrentTop->NextNode = NULL;
}
return TopNode;
}
Node* LLS_Top(LinkedListStack* Stack)
{
return Stack->Top;
}
int LLS_GetSize(LinkedListStack* Stack)
{
int Count = 0;
Node* Current = Stack->List;
while (Current != NULL)
{
Current = Current->NextNode;
Count++;
}
return Count;
}
void LLS_DestroyStack(LinkedListStack* Stack)
{
while (!LLS_IsEmpty(Stack))
{
Node* Popped = LLS_Pop(Stack);
LLS_DestroyNode(Popped);
}
free(Stack);
}
int main()
{
int i = 0;
int Count = 0;
Node* Popped;
LinkedListStack* Stack;
LLS_CreateStack(&Stack);
LLS_Push(Stack, LLS_CreatNode("abc"));
LLS_Push(Stack, LLS_CreatNode("def"));
LLS_Push(Stack, LLS_CreatNode("efg"));
LLS_Push(Stack, LLS_CreatNode("hij"));
Count = LLS_GetSize(Stack);
printf("Size : %d, Top:%s\n\n", Count, LLS_Top(Stack)->Data);
for (i = 0; i < Count; i++)
{
if (LLS_IsEmpty(Stack))
break;
Popped = LLS_Pop(Stack);
printf("Popped : %s, ", Popped->Data);
LLS_DestroyNode(Popped);
if (!LLS_IsEmpty(Stack))
{
printf("Current Top : %s\n", LLS_Top(Stack)->Data);
}
else
{
printf("Stack is empty.");
}
}
LLS_DestroyStack(Stack);
return 0;
}
[실행결과]
Size : 4, Top:hij
Popped : hij, Current Top : efg
Popped : efg, Current Top : def
Popped : def, Current Top : abc
Popped : abc, Stack is empty.
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
김치나베우동 할때 나베가 냄비였구나
-
안녕하세요 배고픔에 굶주려있는 정시러입니다. 일단 어그로 죄송합니다 여러분의 작은...
-
프사확인용 0
ㅇㅇ
-
얼버기 0
좀 늦게출발
-
닉변함 0
킥킥킥
-
ㅋㅋㅋ 어딘가에 있슴다 깜짝놀랐네
-
왜 자꾸 운행대기래..! 죽고시퍼?
-
궁금한것이애요
-
그동안 공.떡 앱이랑 사이트 여러개 쓰면서.. 나름 어디가 좋았는지 정리해 볼 겸...
-
얼버기 2
사실 까먹고 지금 씀
-
조금이라도 보이면 정상 오른쪽처럼 되면 폐,심장 질환있을수도있음 보닌 16살때부터...
-
고1, 고2때 놀아버려 수학 개념이 없는상태인데 학교에선 수1수2 문제 풀고 있고...
-
일주일에 휴일이 두 개지요.
-
이러면 안되는데 아
-
하야크 집으로!
-
뇌는 굳어버렸고 성격은 망가져버린지 오래인듯
-
하는 사람이 있긴 한가요??
-
그때로 돌아가고싶다
-
그래도 쪽팔림을 무릅쓰고 오르비에 공부 기록 올리는 게 인생에 도움되겠죠? 기출 >...
-
난 능지가 딸리는 듯 .. 현타가 옵니다
-
자자 0
-
안녕! 난 재수를 거쳐 시립대 상경에 입학한 04야 수능치고 입학하기전까지만 해도...
-
몯요일밤 영상에서 댓글 곱창난거 첨보네 ㅋㅋㅋㅋ
-
최근에 유행했던 문제라던데 유행 다 지나서야 알았네요... 다들 답 아시나요? 해설...
-
안자는사람있나 4
다들 모하세요
-
독서를 해볼게요 2
히히
-
토 나온다 1
사람 못 믿겠다
-
쥐엔쟝 6
4시야
-
개잘쏘네 ㄷㄷ 1
물론 내가
-
그대로 안나오면 버려야지
-
한번만 더... 일본에서 찍은 사진임...
-
에전에 ㄹㅇ 아침에 참새가 짹짹짹대는것 지나가다 들은것 마냥 ㄹㅇ 어쩌다 지나가다...
-
자라 1
라유 유산슬
-
토나온다
-
얼버기 0
미라클~
-
보통 ㅇㅈ 7
보통 ㅇㅈ할때 사진 몇분동안 올리나요?
-
본교재가 작년에 비해 얇아진거 빼면 달라진 점 없나요??
-
보건실에 누워서도 공부하고, 똥싸면서 공부하고, 밥먹으며 공부하고, 등하교때도...
-
아 진짜 잔다 3
자야돼
-
5살 이후로 계속 경기도 살았는데도 가끔 나도 모르게 전라도 사투리 억양이나 말투가 나옴
-
오..로지! 5
은..시안!
-
아 c언어 죽을거같아 살려줘 능지시치;;;;;;;;;;;
-
하
-
다들자나봐
-
잔다 5
.
-
지얼굴올리고 점수 투표올리는거
-
파울하버의 공식 0
거듭제곱의 합 공식의 일반형임(짝수에 대해서만) 홀수에서는
-
아직도 안자고있는 미친수험샹은 질문하지마라
-
내신필요없이 수능만 준비하는 사람은 3번은 빼고 1,2번만 알면되나요??? 3번은...
코린이라 정렬알고리즘 어제 처음 배웠는데 진짜 무슨 소린지 모르겠더라구요.하노이 문제도 뭔소리인지 모르겠고 암튼 대단하십니다
하노이의 탑... 원반에 대한 순서를 어떻게 파악하느냐 그 문제가 많이 어렵지요 ㅜㅜ 제 기억 상으로는 C언어를 처음 배울 때 정렬 개념에 대한 예시로 봤었는데... 지금 생각해보면 가볍게 넘겨둘 걸 그랬습니다.
어차피 하노이의 탑 예제는 자료구조 쪽에서 실컷 다루게 될 테고, 유사한 개념들을 백준이나, 알고리즘 수업에서 계속 학습하게 될 테니까요.
처음 접하시는 상태라면, 가볍게 넘겨가셔도 될 듯 싶습니다 :)
네 생각지도못한 답변해주셔서 감사하네요 좋은 밤 되세요!
좋은 밤 되세요 :-)