컴공 일기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를 선물하세요.
-
입문n제 2개풀어서 어려운거 풀고싶은데 강의없이 해설 이해하기 어려울까요?
-
이해원 시즌2랑 드릴 둘 중 하나 하려하는데 각각 난이도 어느 정도임?
-
시대 복습영상 0
복습영상 받은 거 학원 그만 둬도 계속 볼 수 잇나요?
-
나 진짜 문학 이렇게 많이 틀랴본적은 최근에 없었는데 1
평 가 원 스 럽 지 않 음
-
맞팔구함 0
ㅇㅇ
-
조만간 패딩꺼야겟네
-
지인선 n제로 공통 마스터해서 공통 0틀 간다
-
채점함에 따라서 75점도 95점도 될 수 있다
-
저쪽은 사탐이니까 그럴 수 았는데 과탐은 진짜 지구를 제외하곤 강사 실력에 따라...
-
오르비꺼라 2
넵
-
지구특 4
둥글게 생김
-
강기분 양이 너무 많아서 비독원 할려하는데 ㄱㅊ을까요
-
중견수(CF) 수비는 평균 이상 하는편 실책 1년에 7개정도 1년차 신인 타율 :...
-
조졌다;;;;;;
-
ㅇㅈ 6
인증 주작은 뭐야
-
이미 세번째 수능준비라니
-
ㅇㅇ평가원스럽지않음암튼내말이맞음문학줮같네ㅋㅋ
-
오전 오후에는 직장인 저녁에는 수험생 무엇?
-
07년생이후로는 2
이제 현역 수는 급격히 커브될텐데 ㄹㅇ 올해가 여러모로 정상적인(??) 마지막 입시일 듯
-
국어 김승리T EB-SCHEMA 3 - review sheet 고전문학 김승리T...
-
탐구 잘해봤자 소용없음 10
탐구 11 떠도 국수 말아먹으면 지거국도 간신히 감 못갈수도 있음
-
다른 과목은 A니까 B고, B니까 C야 라는 걸 생각하는 능력이 필요하다면.....
-
생각하심?
-
기사 보니까 올해는 확실히 뽑는단 소리 말곤 없던데 근데 2026 정원은 ㅈ될 가능성이 보이네
-
5등급 국어 1
이번 9모 74점으로 5등급입니다. 항상 문학 엄청 틀려서 이번에 첨으로...
-
애니추천좀요 8
중2병 심합니다 근데 뽕빨물은 취급안함(소아온 등등 추천시 차단)
-
뭔가 익숙하게 생겼는데 안풀려서 답지보면 ‘오…이렇게 생각할수도 있구나 신기하네’ 이런생각듦..
-
사실 제가 틀림요 평가원이 은근 자주 낚네 나는 그냥 루트 1-sin^2세타하면 되는줄
-
난이도가 어떤거 같음..? 좀 쉬운거 같은디..
-
ㅋㅋㅋㅋㅋ
-
김용택 기출예감풀까 시대인재 중고로 사서 풀까 머 풀까
-
참가율은 저조하지만 늘 오는 정규행사인 프사추천을 받아보도록 할게욤 ㅇㅅㅇ
-
아는 게 많아질 때마다 알아야 하는 게 더 많아지기 때문.. 상대적으로 보면...
-
Erection 21
-
뉴스타트 프리미엄 N수 메가패스(교재캐쉬 30만원) <- 이거 올초에 얼마였는지 아시는분??
-
Central of Asia university 이런건줄 알고 있었는데 Chung...
-
충분히 도움됩니다 1 2 4 5번은 확실히 따라하시면 좋고 3번은 좀 개인 상황에 따라 다르다 봐요
-
경희대 최저 1
경희대 탐구 2합 평균이라는데 2 3맞으면 어케 되는건가요? 2.5해서 2라는건가요?3인가요?
-
9모 3틀 이후로 실모 풀때마다 꼭 1~3개씩 틀리고 만점은 살면서 한 번도...
-
저보다 늦으신분도 있나요.....후... 전 이제 겨후 70대이네요... 말출...
-
안녕하십니까 중3 학생인데요 국어 인강을 들으려고 찾아보는데 김승리 쌤이랑 김동욱...
-
컴공 지망하는 고2 입니다 지1은 정보계열이라 선생님과 상의 후 안들었고 물2는...
-
롤 다이아는 0
게임 능지 이슈가 너무 씨게 와서 도전 포기해야겠다. 에메랄드가 한계네
-
그냥 앉아만 있는 수업이고 싶다..자꾸 멀 시킴..짱남..
-
아무튼 관입되고 부정합이 있었다네요
-
인원 조정은 하더라도 모집정지는 아니지 않을까요… 만약 하면 상위권 대학 다 크게 영향받지 않나요?
-
항상 정신을 차려야 돼 19
이거 하나 틀림ㅋㅋ
-
6월 후부터 물리 공부 시작해서 아직 역에보를 완벽하게 끝내진 못했는데 역에보...
-
학점 인증 11
ㅁㅌㅊ?
-
그냥 진급시켜주려나 그게 아니고서야 24+25학번을 어떻게 수용함
코린이라 정렬알고리즘 어제 처음 배웠는데 진짜 무슨 소린지 모르겠더라구요.하노이 문제도 뭔소리인지 모르겠고 암튼 대단하십니다
하노이의 탑... 원반에 대한 순서를 어떻게 파악하느냐 그 문제가 많이 어렵지요 ㅜㅜ 제 기억 상으로는 C언어를 처음 배울 때 정렬 개념에 대한 예시로 봤었는데... 지금 생각해보면 가볍게 넘겨둘 걸 그랬습니다.
어차피 하노이의 탑 예제는 자료구조 쪽에서 실컷 다루게 될 테고, 유사한 개념들을 백준이나, 알고리즘 수업에서 계속 학습하게 될 테니까요.
처음 접하시는 상태라면, 가볍게 넘겨가셔도 될 듯 싶습니다 :)
네 생각지도못한 답변해주셔서 감사하네요 좋은 밤 되세요!
좋은 밤 되세요 :-)