컴공 일기93
게시글 주소: https://orbi.kr/00057343904
오늘 코딩은 요기까지예용!
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int Data;
struct Node* NextNode;
//단방향 연결 리스트
};
//노드 생성
Node* SLL_CreateNode(int NewData)
{
Node* NewNode = (Node*)malloc(sizeof(Node));
NewNode->Data = NewData;
NewNode->NextNode = NULL;
return NewNode;
}
//노드 메모리 해제
void SLL_DestroyNode(Node* Node)
{
free(Node);
}
//노드 추가
void SLL_AppendNode(Node** Head, Node* NewNode)
{
if ((*Head) == NULL)
{
*Head = NewNode;
}
else
{
Node* Tail = *Head;
while (Tail->NextNode != NULL)
{
Tail = Tail->NextNode;
}
Tail->NextNode = NewNode;
}
}
//노드 탐색
Node* SLL_GetNodeAt(Node* Head, int Location)
{
Node* Current = Head;
while (Current != NULL && (--Location) >= 0)
{
Current = Current->NextNode;
}
return Current;
}
//노드 삭제
void SLL_RemoveNode(Node** Head, Node* Remove)
{
if (*Head == Remove)
{
*Head = Remove->NextNode;
}
else {
Node* Current = *Head;
while (Current != NULL && Current->NextNode != Remove)
{
Current = Current->NextNode;
}
if (Current != NULL)
Current->NextNode = Remove->NextNode;
}
}
//노드 정방향 삽입
void SLL_InsertAfter(Node* Current, Node* NewNode)
{
NewNode->NextNode = Current->NextNode;
Current->NextNode = NewNode;
}
//노드 역방향 삽입
void SLL_InsertBefore(Node**Head, Node* Current, Node* NewHead)
{
Node* Tail = (*Head);
while (Tail->NextNode != Current)
{
Tail = Tail->NextNode;
}
Tail->NextNode = NewHead;
NewHead->NextNode = Current;
}
//헤드 노드 정방향 삽입
void SLL_InsertNewHead(Node** Head, Node* NewHead)
{
if (*Head == NULL)
{
(*Head) = NewHead;
}
else
{
NewHead->NextNode = (*Head);
(*Head) = NewHead;
}
}
//노드 개수 세기
int SLL_GetNodeCount(Node* Head)
{
int Count = 0;
Node* Current = Head;
while (Current != NULL)
{
Current = Current->NextNode;
Count++;
}
return Count;
}
//전체 노드 출력
void SLL_PrintAllNodes(Node* List)
{
Node* Current = List;
while (Current != NULL)
{
printf("%d\n", Current->Data);
Current = Current->NextNode;
}
}
int main()
{
int i = 0;
int Count = 0;
Node* List = NULL;
Node* Current = NULL;
Node* NewNode = NULL;
for (i = 0; i < 5; i++)
{
NewNode = SLL_CreateNode(i);
SLL_AppendNode(&List, NewNode);
}
NewNode = SLL_CreateNode(-1);
SLL_InsertNewHead(&List, NewNode);
NewNode = SLL_CreateNode(-2);
SLL_InsertNewHead(&List, NewNode);
Count = SLL_GetNodeCount(List);
for (i = 0; i < Count; i++)
{
Current = SLL_GetNodeAt(List, i);
printf("List[%d] : %d\n", i, Current->Data);
}
printf("\nInserting 3000 After[2].... \n\n");
Current = SLL_GetNodeAt(List, 2);
NewNode = SLL_CreateNode(3000);
SLL_InsertAfter(Current, NewNode);
printf("\nInserting 2999 Before 3000...\n\n");
Current = SLL_GetNodeAt(List, 3);
NewNode = SLL_CreateNode(2999);
SLL_InsertBefore(&List, Current, NewNode);
Count = SLL_GetNodeCount(List);
for (i = 0; i < Count; i++)
{
Current = SLL_GetNodeAt(List, i);
printf("List[%d] : %d\n", i, Current->Data);
}
printf("\n");
printf("Printed by SLL_PrintAllNodes\n");
SLL_PrintAllNodes(List);
printf("\nDestroying List.... Thanks.");
for (i = 0; i < Count; i++)
{
Current = SLL_GetNodeAt(List, 0);
if (Current != NULL)
{
SLL_RemoveNode(&List, Current);
SLL_DestroyNode(Current);
}
}
}
실행결과 :
List[0] : -2
List[1] : -1
List[2] : 0
List[3] : 1
List[4] : 2
List[5] : 3
List[6] : 4
Inserting 3000 After[2]....
Inserting 2999 Before 3000...
List[0] : -2
List[1] : -1
List[2] : 0
List[3] : 2999
List[4] : 3000
List[5] : 1
List[6] : 2
List[7] : 3
List[8] : 4
Printed by SLL_PrintAllNodes
-2
-1
0
2999
3000
1
2
3
4
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
회원에 의해 삭제된 댓글입니다.좋아요 0
-
[긴글주의, 정보글] 비문학 개념서 소개 및 수요 조사 0
안녕하세요 저는 한양대학교 컴퓨터소프트웨어학부 3학년에 재학 중인 김미한이라고...
-
간다면 어디가 나을까요?
-
이그잼포유 연간이용권 가지고 있어요 혹시 족보닷컴이랑 공유하실 분?
-
기다려주세욛
-
이제는 더 이상 2
물러날 곳이 없따..
-
저 구매하려 하는데, 어떠셨는지 알려주시면 감사하겠습니닷 !!
-
달리겟어요 이삭 완료 아 이컨셉 별론가
-
지구과학 질문 2
왼쪽 그림에 동서남북 표기가 있는걸 봐서 그림을 위에서 본건가요? 답지에는 오른쪽에...
-
정시공부한답시고 기본중의 기본인 기출도 제대로 본게 없었네
-
탈릅 20
하기에는 너무 먼 길을 걸어온 것 같아요
-
맛도리 0
-
탈출하고 싶다… 1
고려대에 가고 싶다…
-
. 6
-
아 ㅋㅋㅋㅋㅋ
-
28에 양도합니다. 쪽지주세요.
-
덕코주기
-
해설이 너무 동문서답하거나 해설이 너무 부족한 거 같아서 스트레스 받습니다.....
-
허리디스크 0
공부는 하는만큼 실력이 올라서 재밌는데 디스크 때문에 앉을 수가 없음... 공부하고...
-
21수능 정시출신이구요 화생 -> 물지 로 바꾸려 합니다 지구과학은 생명 유전보단...
-
양심고백. 3
재수(반수)해서 급간 못올리면 사람아니라고 생각한적 있었음
-
수능이 노력하면 되는 시험이 100% 틀린건 아닌데 6
흠 나는 재능이 70퍼는 먹고 들어간다봄 위에는 의치한약수 + 서울대의 입결임 펑크...
-
영어 1 받으려면 얼마나 해야한다고 봄?
-
리마인드 이메일 보내기; 사회적 attitude(태도) 0
제가 뇌과학에 관심이 많고 앞으로 전공하고자 해서, 이번에 서울대학교 뇌인지과학과의...
-
ㅈㄱㄴ
-
아직 찾지는 못했지만 언젠가 봤으면 좋겠네 나처럼 오르비 많이 하시는 분이면 좋겠다
-
당충전을 하겟어요
-
사진들고 병원가서 관련서류 받고 신검가야하는데... 귀찮다..
-
지오지브라 질문 6
삼각형 만들고 싶은데 어떻게 해야할까요 ㅠ
-
요즘 독학하는데 아이패드로 공부하는데 갑자기 종이책으로 공부해야 제대로 하능게...
-
화1 주양자수 원자량 오비탈 전부 외워놔야 하나요? 2
2학기때 화1을 하는데 주양자수 부양자수 스핀양자수 오비탈 이런걸로 킬러가 나온다고...
-
아씨 갤럭시 데이터킬때, 팝업창 안뜨게좀 못함??? 3
,그 위아래 화살표 데이터 누르면 "데이터를 허용하시겠습니까?" 이거 좀 안뜨게...
-
성균관대오지마라 2
시험기간에 과제로 제페토(마크비슷한거)하고있다... 서성한 성적이면 서강대나 한양대로 가도록..
-
질문받는다 2
지금 시간은 다 대학생이겠지
-
4급 혹은 5급 받으신분들 허리디스크 어느정도셨는지 궁금합니다. 미필인데 어제...
-
잇올 질문 0
잇올 교과질문 할 수 있다는데 쉬는시간이나 점심시간에 찾아가서 질문하는 방식인가요?
-
5만덕만 모으면 0
원하는 레어를 살 수 있다
-
지금 아이디어+워크북중인데 6평전에 기생집 다끝내야할거 같음 워크북은 나중에 풀고...
-
추천좀
-
전남친이 제 네이버 비번을 알아요 전에 제가 특이하다고 알랴준적 있어요 근데...
-
수학 문제 풀때 정답률 자체는 높은데 시간이 너무 오래걸리면 양치기가 답인가요?
-
대부분의 논술강사들이 열심히 자료도 올리고 칼럼도 쓰는뉴 노멀이 오는 그때를...
-
계신가요
-
98점 99점 이런건 엄청 잘띄워주는데 100점 <<얘 안띄워줌 서비스로 한 곡 더 들어가서 그런가
-
N회독 돌릴거임?
-
야발 스카건물 드릴 지지지지징 공사를 몇시간쨰하는거야 8
진짜머리아파
-
3.7년 나는 대학을? 3.7년만? 다니면 되는거임 버텨주마 캬컄ㅋㅋ
-
3개월이상 결제해서 고를 수 있는데 현재 메가듣는중인데 뭐가 나을까요?...
-
수학 개념복습 0
지금 실전개념 들으면서 워크북 기출 이렇게 풀고 있습니다. 그런데, 제가 개념파트나...
-
라떼는 2등급 올라갈때면 기출이었는데 요즘엔 n제 푸나...
-
이준석·전공의 대표 만남...“尹, 원점 재검토 선언해야” 2
4·10 총선에서 경기 화성을에 당선된 이준석 개혁신당 대표와 박단 대한전공의협의회...