이번에는 앞서 구현했던 원형 연결 리스트를 바탕으로 스택을 구현해 봅니다. 아래에 제시되는 CLinkedList.h 파일과 CLinkedList.c 파일을 변경하지 않고 그저 활용만 해서 스택을 구현하는 것이 문제입니다. //CLinkedList.h 헤더 파일로 저장 #ifndef C_LINKEDLIST_H #define C_LINKEDLIST_H #define TRUE 1 #define FALSE 0 typedef int Data; typedef struct Node { Data data; struct Node* next; } Node; typedef struct { Node* tail; Node* cur; Node* before; int numOfData; }CList; typedef CList Li..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이번 시간에는 연결 리스트를 기반으로 스택을 구현합니다. 그런데 이에 앞서 연결 리스트로 까다로운데 이걸로 스택을 구현하겠다니 걱정할 수도 있겠습니다. 하지만 전혀 그런 걱정할 필요가 없습니다. 스택의 구조는 매우 단순합니다. 예를 들어 연결 리스트에서 머리에 데이터를 추가하고 머리부터 데이터 조회를 한다면 그것이 바로 스택의 구조가 됨을 눈치챌 수 있습니다. 연결 리스트 기반 스택을 구현하기 위해서는 head 포인터가 필요합니다. 다음은 연결 리스트 기반 스택의 헤더 파일을 정의한 것입니다. //LBStack.h 헤더 파일로 저장..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 배열 기반 스택의 구조는 정말 단순합니다. 만약 배열이 10개 선언되었다면, 배열의 0번지가 스택의 바닥이 됩니다. 탄창의 밑바닥과 같은 곳입니다. 그리고 데이터를 저장할 때마다 0번지, 1번지, 2번지, ... 순으로 저장 위치를 증가시킵니다. 그리고 가장 마지막에 데이터가 저장된 위치를 변수 top에 저장합니다. 따라서 만약 배열 기반 스택의 0번지부터 7번지까지 데이터가 저장되었다면 top은 7이 되는 것입니다. 앞서 스택의 ADT도 정의했고 구조도 이해했으니 이를 기반으로 스택 헤더 파일을 정의해 보겠습니다. //ABStac..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 앞서 여러 Chapter에 걸쳐 공부한 리스트는 대표적인 선형 자료구조입니다. 그리고 이번에 배우게 될 스택이란 자료구조도 선형 자료구조의 일종입니다. 스택이란 총알을 저장하는 탄창에 비유할 수 있습니다. 아니면 차곡차곡 쌓이는 접시에도 비유할 수 있습니다. 이 둘의 공통점은 가장 마지막에 추가한 것일수록 가장 먼저 사용된다는 것에 있습니다. 총알의 경우 총알을 하나씩 탄창에 넣다 보면 가장 먼저 넣은 총알은 탄창의 가장 아래에 위치하게 됩니다. 그리고 가장 마지막에 넣은 총알이 탄창의 가장 위로 나옵니다. 따라서 이 탄창을 총에 ..
이번 연습문제에서는 양방향 연결 리스트의 완전한 구현을 요구합니다. 이유는 앞서 구현한 양방향 연결 리스트를 모델로 하여 조금만 수정하고 조금만 보태면 완성할 수 있기 때문입니다. 더미 노드 기반의 양방향 연결 리스트의 특징은 다음과 같습니다. 양방향 연결 리스트다. 더미 노드가 리스트의 앞과 뒤에 각각 존재한다. 포인터 변수 head와 tail이 있어서 리스트의 앞과 뒤를 각각 가리킨다. 이 경우 꼬리에도 더미 노드가 존재함에 유의합니다. 그리고 구현 범위를 제한한다는 의미에서 헤더 파일의 일부를 제공합니다. 즉, 아래에서 보이는 구조체의 함수를 기반으로 양방향 연결 리스트를 구현하면 됩니다. typedef struct Node { Data data; struct Node* next; struct No..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. '양방향 연결 리스트' 또는 '이중 연결 리스트'라고도 불리는 이 자료구조는 그 이름이 의미하듯 노드가 양쪽 방향으로 연결된 구조의 리스트입니다. 즉, 왼쪽 노드가 오른쪽 노드를 가리킴과 동시에 오른쪽 노드도 왼쪽 노드를 가리키는 구조입니다. 양방향 연결 리스트를 이해하기는 어렵지 않습니다. 지금까지 배운 연결 리스트를 크게 세 가지로 분류하자면 다음과 같습니다. 단순 연결 리스트 더미 노드 연결 리스트 원형 연결 리스트 위 세 가지 연결 리스트는 모드 한쪽 방향으로면 연결되는 단방향 연결 리스트입니다. 양방향 연결 리스트는 위 세..