컴공 일기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를 선물하세요.
-
안녕하세요 영어 문제 제작이 취미인 과다샾 입니다 앞으로 이렇게 매일 영어 두...
-
뉴런 듣다가 뇌정지 옴 언제 설명해준거지
-
자췻방에 여자가끔 데리고 오는데 그럴때마다 바닥에 떨어진 긴머리 누구야! 라고...
-
5월 더프 후기 1
국어 100 수학 88 21,29,30 쉽지 않았다..12번 헤맸는데 그냥...
-
뭔가 재밌긴 한데 이걸 쓸까 싶은데 일생 나중에 많이 쓰이나요??
-
나같은 현역 애기들은 선거권 없다
-
Breaking news
-
메가패스 양도 1
메가패스 매우 싸게 양도합니다 현재 56만원에 살 수 있다고 들었습니다. 40만원에...
-
재밌네
-
선거철이라 그런가 꺼지십쇼
-
팩트는 이재명 대통령되면 경제가 살아날 거라는 거임. AI에 점진적으로 유연하게...
-
왤캐 어렵지.. ㅠㅠ 개말렸네
-
화작 - 90 5 17 22 27 틀 17번은 찍었고 나머지 세 문제는 다시 풀어도...
-
보통 사회성이란게 상대 얘기 잘 들어주고 공감해주고 대화를 재밌게 이끌어주고 굳...
-
나랑 동거할사람
-
어케해요 막 일본 대지진 예언한 만화땜에 못가겠다는데 이해안되는 제가 이상한건가요..
-
5덮 기하 29 오류고나발이고 깔끔하게 푸신분없음? 4
식구하는데까진 금방이었는데 깡계산하다가 10분날리고 안되겠다싶어서 b제곱에 1부터...
-
너무 피곤한데 자고 일어나서 공부하러 가야겠다
-
차단완 5
ㅂㅅ
-
3까지 갈 수 있을까요.. 하루에 6시간씩 하고있긴한데
-
일반화학말이야
-
★6평 대비 고난도 수학 아이디 모의고사 1회 배포★ 1
안녕하세요. 이투스 온라인 수능 수학 강사 전인덕 입니다. 고등학교 때 오르비에서...
-
맛있게 먹겠습니다!! 무브주식회사를 숭배해라 무브링 푸하하
-
결과가 주작한거보다 낮으면 개쪽인데 굳이 왜 주작치는거임?
-
아잉 2
큥♡ 헤엣~~♡
-
헉
-
누에나방 암컷은 페로몬을 분비하여 수컷을 유인한다. 16
평가원 어떤 과목 기출에 나온 문장인지 맞춰보세요
-
자다가 침대에서 떨어졌습니다.
-
캬캬
-
공통 1~15번까지 전부 풀 시간 동안 기하 29번에만 쓴 나는 뭐.가.되.는.데?
-
아이고
-
이미 왔나? 어?
-
6위. 홍콩 디즈니랜드 테마파크 크기도 세계에서 가장 작고 성크기도 젤 작다. 근데...
-
P_0 위치 조건을 제1사분면으로 확정짓지 않으면 P_0가 제2사분면에 있을 때도...
-
3수긴한데 인서울만 해도 행복할꺼같음 올해 작년엔 논술반수였어서 공부 제대로 안하기도 했고
-
들었으면 출발
-
새 같이 생긴 사람
-
18000명임.
-
당연히 다 있는건줄 알았는데
-
무난하노
-
망갤테스트 11
ㅇ
-
아 너무 피곤해 2
머리 감고 왔는데도 잠이 안깨
-
.
-
구매를 할까말까 엄청 고민되네요 작년수능 많이 반영되서 많이 개정됬단 소린 들었는데...
-
중국인 건은 아닌데 갑자기 2년 전부터 칼부림 뉴스 ㅈㄴ 쏟아져 나오니까 전방주시...
-
원래 여자들은 수요높은 20초반 때 사회성 제일 떨어지고 남자는 회사들어간 직후에...
-
돈벌러 으럇으럇 6
다들 힘내요
-
진짜 어지럽네
-
메인 내려갔네 6
왜내려감??
코린이라 정렬알고리즘 어제 처음 배웠는데 진짜 무슨 소린지 모르겠더라구요.하노이 문제도 뭔소리인지 모르겠고 암튼 대단하십니다
하노이의 탑... 원반에 대한 순서를 어떻게 파악하느냐 그 문제가 많이 어렵지요 ㅜㅜ 제 기억 상으로는 C언어를 처음 배울 때 정렬 개념에 대한 예시로 봤었는데... 지금 생각해보면 가볍게 넘겨둘 걸 그랬습니다.
어차피 하노이의 탑 예제는 자료구조 쪽에서 실컷 다루게 될 테고, 유사한 개념들을 백준이나, 알고리즘 수업에서 계속 학습하게 될 테니까요.
처음 접하시는 상태라면, 가볍게 넘겨가셔도 될 듯 싶습니다 :)
네 생각지도못한 답변해주셔서 감사하네요 좋은 밤 되세요!
좋은 밤 되세요 :-)