컴공 일기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
ㅠ
-
독서 공부를 시작해보자! 또 지금 등교하신분 계시나요??
-
에효..
-
한지 vs 세사(vs동사) 추천 부탁드립니다 세지는 고정
-
보통 내용에서 추상적인 글이나 내용나올때 아 그런갑다~ 하고 대충 다음 문장...
-
쇼군 정주행을 해야 한다..
-
오늘도 성공
-
드디어 집왔다 0
롤체하다가.
-
새벽5시에 안자고 뭐하는 지거리야
-
어우 피곤해 5
-
큐브 후기 2 2
심심해서 틈틈이 하고 느낀 점 1. 별테하는 친구가 한 명은 꼭 존재한다. 2....
-
수잘싶 9
ㄹㅇ
-
왜 일어나보니 새벽 4시지 오엠쥐다 진짜루..
-
ㅅㅂ 난 절대 안할 줄 알았는데 반수생각이 스멀스멀... 근데 공부하기는 또 싫고....
-
정시로 돌려도 무죄인가요 국어랑 영어는 내신때문에 안한지 1달정도 되었고 언매랑...
-
공부하다가 체중관리 못해서 허벅지 다리 살이 다 텄는데 보기도 흉하고 우울함,, 어카냐
-
4단원? 아님 4,5단원?
-
아이스크림인데 냉동실 넣어놓고 까먹음 한달 넘은듯?
-
의지박약이슈 흑흑 그렇게 살고 싶다 피지컬 100 보는데 끓어오르네..
-
요즘 정시로 수능 몇등급 정도면 합격하나요? 그냥 궁금해서...
-
대학 수학 시험 망침 10
Sec적분 못해서 최대 96점…. 인생
-
1학년때 3점대였던 친구는 말그대로 떡상했는데 나는 다망해서 훨씬 뒤쳐져버렸네...
-
ㄹㅇ
-
무물 0
설공 화석 중간고사 아직 안 끝남 3대 450
-
힘과 운동량인것이에요
-
내일이 두렵구나
-
내년에도 강윤구 이투스에 있음?
-
자러감 1
일찍일어나야함...!!!
-
고속 글 하나 올리니까 3분만에 조회수 200명 가버리네 ㄷㄷ
-
나 마니 추함 2
토할 정도는 아님
-
요약 1) 올2컷으로 건대, 동국대 , 홍익대 , 외대어문 가능 , 시립낮은 문과...
-
미적분 1
작수 2등급정도인데 미적분을 27-30까지 다 틀렸습니다 미적분을 정말 잘하고...
-
쩝 민희진 빠지면 이런 퀄 안나올텐데
-
심심쓰 1
본가오니까 동네친구들은 죄다 재수학원에 박혀있어서 재미읎다
-
반수를 이제야 시작을 한 씹허수 3모 11223 씹허수 1. 국어 이감컨 연간패키지...
-
고2이고 정시대비반인데,, 독서 연습을 지문 구조도 그리는거로 연습하거든요.....
-
원궤도는 수평면과 수직을 이루고 있습니다. 즉 중력과 평행합니다. 이 궤도의...
-
제정 12년 만에 서울시 학생인권조례가 폐지 수순을 밟게 됐습니다. 서울시의회는...
-
어느 학교냐에 따라 격차가 좀 나지 않을까 가령 같은 서울이라도 막장 쌤들이 많은...
-
무물보 4
Whatever
-
치환적분 삼각함수 미분적분 구분구적 부분적분 다 까먹은줄 알았는데 몸이 기억함...
-
재수랑 현역때랑 수학이 똑같은데 원래 다들 이러니? 하나도 안 는 것 같고 나만...
-
몸져 눕고 싶다
-
심멘. 아니 학교에서 다 풀래서 어쩔수 없이 푸는데, 진짜 경기체가 같은거 풀때는...
-
오늘자 서점가서 직구로 사온 미적적분님. 9모 이후 통통이로 노선 바꿔서 뒤져버린...
-
시티팝 민희진풍으로 잘 끓임 우울감 치료된당...
-
집중의 감각 0
오늘 시험볼 때 진짜 엄청 집중했었음 온몸이 차분하게 가라앉고 움직이지 않은 채로...
코린이라 정렬알고리즘 어제 처음 배웠는데 진짜 무슨 소린지 모르겠더라구요.하노이 문제도 뭔소리인지 모르겠고 암튼 대단하십니다
하노이의 탑... 원반에 대한 순서를 어떻게 파악하느냐 그 문제가 많이 어렵지요 ㅜㅜ 제 기억 상으로는 C언어를 처음 배울 때 정렬 개념에 대한 예시로 봤었는데... 지금 생각해보면 가볍게 넘겨둘 걸 그랬습니다.
어차피 하노이의 탑 예제는 자료구조 쪽에서 실컷 다루게 될 테고, 유사한 개념들을 백준이나, 알고리즘 수업에서 계속 학습하게 될 테니까요.
처음 접하시는 상태라면, 가볍게 넘겨가셔도 될 듯 싶습니다 :)
네 생각지도못한 답변해주셔서 감사하네요 좋은 밤 되세요!
좋은 밤 되세요 :-)