본문 바로가기
해피 코딩/Algorithm

[Day 2] 자료구조의 확장 / Stack에서 ArrayList까지

by happy-coding 2026. 1. 2.
📝 2025 C언어 특강 내용 기록

😼 Github : https://github.com/mad-cost/C-structures-basics

 

Day 2에서는 기존 Stack 방식을 확장하여,
배열을 이용한 List 방식으로 동작하도록 수정한다.

 

📌 기존 Stack 방식에서 배열 기반 List 방식으로 확장


📋 Day 2. 요구사항 정리

1️⃣ pop 기능 확장

Day 1에서는
스택의 후입선출(LIFO) 방식에 따라
pop을 실행하면 가장 마지막에 저장된 데이터가 삭제되었다.

 

🔁 기능 변경 사항

Day 2에서는 이를 확장하여,
삭제할 데이터를 직접 입력받아 제거하는 방식으로 수정한다.

1.입력  2.삭제  3.확인  4.종료
삭제할 데이터 입력 : 3

 

 삭제할 데이터가 존재하는 경우

리스트에 다음과 같이 데이터가 저장되어 있을 때

1 6 3 4 7

 

사용자가 3을 삭제하면,

1 6 4 7

와 같이 뒤에 있는 데이터들을 앞으로 당겨서 저장해야 한다.


📌 즉, 데이터의 순서는 유지되어야 한다.

 

삭제할 데이터가 존재하지 않는 경우

사용자가 삭제하려는 값이
리스트에 존재하지 않으면 다음 메시지를 출력한다.

3는 List에 존재하지 않습니다.

1️⃣ push 기능 확장

Day 1에서는
스택의 후입선출(LIFO) 방식에 따라

push를 실행하면
새로운 데이터가 항상 마지막 위치에 데이터가 저장되었다.

 

🔁 기능 변경 사항

Day 2에서는 이를 확장하여,
입력한 데이터가 자신의 위치를 찾아 정렬되도록 삽입하는 방식으로 수정한다.

 

사용자가 값을 입력하면,
기존 데이터의 순서를 유지한 상태에서, 들어갈 위치를 찾아 삽입한다.

1.입력  2.삭제  3.확인  4.종료
삽입할 데이터 입력 : 3

 

자동 정렬 삽입 예시

리스트에 다음과 같이 데이터가 저장되어 있을 때

1 2 4 8 12

 

사용자가 3을 입력하면,

1 2 3 4 8 12

와 같이 3이 들어가야 할 위치를 찾아 기존 데이터를 뒤로 밀어 삽입한다.


📚 다음 시간까지 

배열 기반 구조를 벗어나,
동적 메모리 할당과 구조체를 사용해 Linked List를 직접 구현해 보도록 하자.

 

1️⃣ 입력 기능

  • malloc을 이용해 노드를 동적 할당한다.
  • 구조체를 사용하여 Linked List 형태로 데이터 저장한다.
  • 각 노드는 다음 노드 주소 를 관리한다.
  • Head(헤드) 노드가 존재하며,
    다음 노드가 없을 경우 NULL 값을 가진다.

2️⃣ 출력 기능

각 노드가 주소로 서로 연결되어 있다는 점이 보이도록

다음 형식으로 출력한다.

(자기 주소) 데이터 (다음 주소) - (자기 주) 데이터 (다음 주소)

 

즉,
주소를 통해 다음 데이터를 참조하고 있다는 것
출력 결과로 직접 확인할 수 있어야 한다.