컴공 일기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를 선물하세요.
-
ㅈㄱㄴ
-
수능원서접수 2
8월 30일에 메시지 온거 지금 봤는데 문제 없을까요? 메시지 이후로는 연락온거 없습니다
-
홍뱃 받았다 11
-
'교권 침해'로 신고당한 고교생…학교장 상대로 소송 이겨 1
"교육활동 간섭" 보건교사가 신고…법원 "반복성 없는 행동" (인천=연합뉴스)...
-
히토리쨩 5
-
빡빡이 모의고사 0
오늘의메인디쉬입니다
-
꿈돌이 인형 안고 잠잘 때 내가 대전사람인게 얼마나 행복하던지
-
메가 독점시장 되어가는거 괘씸해서 대성만 사는데 강민철 안들어서 삼수하는건가?
-
이 ㅅㅂ., 수학 못하겠는데..?
-
안아줘요~ 0
안아달라니까!!!! 대전 러셀 어딘가에서 메아리치듯 외친다
-
쪽지주세요
-
ㅈㄱㄴ
-
작은 성취감이 0
인생의 전부 열심히 공부해서 1등급을 받거나 목표하던 대학에 가거나 운동을 해서...
-
큐브 왜이럼 3
-
4000부 판매돌파 지구과학 핵심모음자료를 소개합니다. (현재 오르비전자책 1위)...
-
오늘따라 유독 글 안 읽히는 ㅅㅂ 오늘 독서 문학 기출 다시 보는데 눈에 하나도 안...
-
겠냐? 대한민국 명실상부 최고의 대학 지역거점국립대학 경북대학교인데 다들 대학 서열...
-
수1 4점 질문 4
추론부터 막혔는데, 어떤식으로 진행해야 하나요?제가 사진에 적은 최댓값의 경우가...
-
접속자 수 많다고 안들어가지는디
-
전 외모 평균이상 재미있고 털털하신 여성분
-
안녕하세요 김승리 강의를 아수라만 들어서 아직 붙여읽기가 너뮤 힘든데 김승리가...
-
높2~낮1에서 오르질 않음 틀리는 영역도 일관성이 없음. 고3때 본 모의고사에서...
-
이원준 계간지 1
님들 강의도 다 들음?
-
지각이야지각 4
아 늦잠쳐잠 크아악
-
기만질 한번 더 3
슬프다…남치니가 연락을 안본다 무슨일 있나
-
이거 몇 분 동안 푸는건가요? 한 25분 잡고 풀면 되나요? 그리고 난이도는...
-
우리가 보는 것이 진짜일까요? 조금 더 넓은 범위에서 말해봅시다. 우리가 느끼고...
-
[고1~고2 내신대비 자료 공유] 고1 국어, 고2 문학, 언매 분석 문제 배포 0
안녕하세요 나무아카데미입니다.2025학년도 고1~고2 내신대비를 위해 고1 국어,...
-
이걸 보고 저걸 추론하라고?? 해설 볼때마다 싶음
-
국수영탐 노베시절 평균 거의 57312에서 올해 평균 24211인데 … 나 수학만...
-
제가 님들 미분해드릴게요
-
문학은 그렇다고 알고있는데 독서도 그렇나요?
-
수험생을 죽였으니까 킬러지 특수한 도구(삼도극, ..)로 죽였다고 킬러인게 아니잖음...
-
아니 작년수능 문학 기출 유네스코로 보는데 가지가 담을넘을때 문제가 적절한걸...
-
오지기출 어려운거만 싹 해얘되나 아직 스텝투 이렇게 갈라져있나요?
-
괜찮은 방법인가요?
-
서로를 이등분하던가?
-
돈없어서 ebs국어 실모사려하는데 퀄 많이 구림?
-
유웨이에서 한국전자인증에서 인증서 내라는데, 발급하려고 들어가니 돈 내라고 하는데 맞나요?
-
김승리 0
님들 성탄제 맨마지막 연 길이 돌아가는 사슴이라고 되어잇잔아여 김승리는...
-
쪽지 ㄱㄱ
-
두분 각각 자료가 서바 해설관련해서 서바 해설된 프린트 자체가 배부되나요 아니면...
-
본인 인서울은 가능했을까...
-
학원 재원생들 파이널 얼마에 사셧나용 20??0
-
강k 3회 답지 0
강k 3회 답지 받을수있을까요ㅠ
-
스카 훌쩍빌런 4
환절기라 훌쩍대는건 나도 어느정도 그러니까 이해할려고 해도 10연발 연속으로...
-
ㅈㄱㄴ
-
1999년의여름밤
-
기술도 없는 나라 제품을 왜 쓰는지
코린이라 정렬알고리즘 어제 처음 배웠는데 진짜 무슨 소린지 모르겠더라구요.하노이 문제도 뭔소리인지 모르겠고 암튼 대단하십니다
하노이의 탑... 원반에 대한 순서를 어떻게 파악하느냐 그 문제가 많이 어렵지요 ㅜㅜ 제 기억 상으로는 C언어를 처음 배울 때 정렬 개념에 대한 예시로 봤었는데... 지금 생각해보면 가볍게 넘겨둘 걸 그랬습니다.
어차피 하노이의 탑 예제는 자료구조 쪽에서 실컷 다루게 될 테고, 유사한 개념들을 백준이나, 알고리즘 수업에서 계속 학습하게 될 테니까요.
처음 접하시는 상태라면, 가볍게 넘겨가셔도 될 듯 싶습니다 :)
네 생각지도못한 답변해주셔서 감사하네요 좋은 밤 되세요!
좋은 밤 되세요 :-)