컴공 일기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를 선물하세요.
-
사진 가독성 구려서 죄송합니다ㅠㅠ 1번문제가 진짜 이해가 안가는데 사랑과 순수의...
-
얼버기 4
-
대표기출2회독 강의로 완료 3회독 하면서 엔제를 ㅇㅅㅇ
-
ㅇㅈㅇㅈ 1
영조어진
-
교육부 "정부가 '의대 증원 자율 감축안 제안' 사실과 달라" 2
내년도 의대 증원분 자율 감축방안이 처음 정부 측 제안에서 비롯됐다는 언론 보도에...
-
용돈 ㅋㅋㅋㅋ 개웃기네
-
너무 슬프구나 4
너무 분하고 너무 화나고 너무 원망스럽다 어찌하면 좋을까 답을 모른다는것은 참 슬프구나
-
개인적으론 의치한설높공 극상위권 약수설연고 최상위권 서성한지디유 상위권...
-
치타는 달린다 0
시대인재N8기 입대완료
-
최상위권 입시분석인데 최상위권은 사탐런을 안하잖아 ㅋㅋ
-
2000덬 22
선착순 3명
-
썼던것도 괜찮숩니다
-
그냥 쎈발점 워크북 교과서 수특 이래 하니까 기출 앵간히 뚫리던데...
-
우우 뜌땨이 뜌땨땨땨
-
f(x)=g(x)+h(x) 이고 f(x)가 x=1에서 대칭이고 g(x)도 x=1에서...
-
영어 과외 2
도움되나요??
-
강평 2
이거보고 강기분 수강신청했다
-
친구한테 카톡 보내면 뭐 주나요?
-
빨리 1
맑은 하늘이 보고싶네요
-
나 왜이리 늦지 2
이제 뉴런 떼는게 ㅅㅂ 재수인데도 이러네
-
시발점 수분감 2회독 (이미 끝) 뉴냅스 2회독 (현재진행중) 4규 (5월중순에...
-
1889.04.20~1945.04.30 Heil mein führer!
-
국영수한은 암기하는거 지겹고 토나오기는 해도 막연하지는 않은데 통과통사는 문제집마다...
-
간쓸개 뭔가 많이 안 푸는 느낌 (?)
-
20수능.. 그래그래하면서 읽다가 저 부분에서 엥 했네요 ㅋㅋㅋㅋ 수능에서 이래도 되는건가..
-
사탐공대 12
솔직히 과탐 가산 3프로 이하면 사탐공대 해볼만 한 거 아닌가? 과탐 1개 사탐...
-
ㅋㅋㅋㅋ
-
비가 내리고 1
음악이 흐르면~
-
섬개완 유전 0
시대에서 유전 특강 들었는데 섬개완 유전 안들어도 상관 없나요?
-
연경 가고싶다
-
님드라 안경 맞춰서 끼고 다니는데 원래 첨엔 좀 눈 시린가... 적응 안되서...
-
올오카 독서 건너뛰고 TIM 앱스키마 해도 되나요? 올오카 문학만 들었고 솔직히...
-
n티켓 난이도 1
시즌1 난이도 어느정도일까요?
-
언매 기하 생1 지1 선택 2년 내내 했고 국수영생지 순으로 백분위가 현역 56...
-
노베가 기하사탐으로 광운공대가능하다고 보시나요 현실적으로? 지금 막 사탐 하나끝내고...
-
수학 N제 추천 1
이번 3월 학평 공통 다 맞고 미적 29,30 틀린 현역인데 공통, 선택 각각...
-
증원 + 필의패 다 통과돼도 여전히 전자가 더 잘 나갈까요? 개인적으로 저거 다...
-
힘겨우니까 걍 안할래
-
오르비 왜 라이트 유저인 내가 항상 활랭에 들어가는거지 14
다 님들이 글을 적게 써서 그럼 빨리빨리 글쓰셈
-
걍 이름부터 뭔가 압도적 1타 느낌임 ㅋㅋ 현씨라는 독특한 성이 한 몫한 듯 별개로...
-
거의 일주일 다되가는데 소리만 나오고 화면 재생이 안됨.ㅠㅠ 옛날에 쓰던 탭 쓰는데...
-
하늘은왜크로아를낳으시고베라를낳으셔서
-
9등진입 6
5등과6등사이의거대한벽이..
-
나도걍탈릅할까 9
떡밥도는거보면자살마려워응응
-
까지는 그냥 형식적으로 말하는 경향이 강하잖아여 근데 지역까지 얘기하면 그건...
-
수능 경제지문 읽을 때 도움 많이 받나요
코린이라 정렬알고리즘 어제 처음 배웠는데 진짜 무슨 소린지 모르겠더라구요.하노이 문제도 뭔소리인지 모르겠고 암튼 대단하십니다
하노이의 탑... 원반에 대한 순서를 어떻게 파악하느냐 그 문제가 많이 어렵지요 ㅜㅜ 제 기억 상으로는 C언어를 처음 배울 때 정렬 개념에 대한 예시로 봤었는데... 지금 생각해보면 가볍게 넘겨둘 걸 그랬습니다.
어차피 하노이의 탑 예제는 자료구조 쪽에서 실컷 다루게 될 테고, 유사한 개념들을 백준이나, 알고리즘 수업에서 계속 학습하게 될 테니까요.
처음 접하시는 상태라면, 가볍게 넘겨가셔도 될 듯 싶습니다 :)
네 생각지도못한 답변해주셔서 감사하네요 좋은 밤 되세요!
좋은 밤 되세요 :-)