선형 자료구조는 데이터가 순차적으로 저장되는 구조를 의미한다.
가장 기본적인 형태의 자료구조로,
배열(Array), 스택(Stack), 큐(Queue), 덱(Deque) 등이 있다.
1. 배열 (Array)
개념
배열은 동일한 타입의 데이터를 순차적으로 저장하는 자료구조이다. 배열의 각 요소는 인덱스를 통해 접근할 수 있다.
특징
- 인덱스: 배열의 각 요소는 0부터 시작하는 정수 인덱스를 통해 접근한다.
- 고정 크기: 일반적인 배열은 선언 시 크기가 고정되지만, 파이썬의 리스트는 동적으로 크기가 변경될 수 있다.
파이썬 구현 예시
파이썬에서는 리스트를 통해 배열을 구현한다.
# 배열의 기본적인 사용
arr = [1, 2, 3, 4, 5]
# 요소 접근
print(arr[0]) # 출력: 1
# 요소 변경
arr[2] = 10
print(arr) # 출력: [1, 2, 10, 4, 5]
![](https://blog.kakaocdn.net/dn/c23kiQ/btsI7lzsnaE/KvOPKT6R2Q4wVKhKtht9c0/img.png)
![](https://blog.kakaocdn.net/dn/dk3Mhd/btsI6icQoAp/kzRfKdAkIUDmDq01Ilh9lK/img.png)
인덱스 | 0 | 1 | 2 | 3 | 4 |
값 | 1 | 2 | 3 | 4 | 5 |
arr[2]=10 | 1 | 2 | 10 | 4 | 5 |
a = []
a = list()
b = [1, 2, 3]
c = ['Life', 'is', 'too', 'short']
d = [1, 2, 'Life', 'is', '3']
e = [1, 2, ['Life', 'is']]
2. 스택 (Stack)
개념
스택은 후입선출(LIFO, Last In First Out) 원칙을 따르는 자료구조이다. 마지막에 삽입된 데이터가 가장 먼저 삭제된다.
특징
- 삽입/삭제:
append
로 데이터를 삽입하고,pop
으로 데이터를 삭제한다. - 탑 요소: 스택에서 가장 위에 있는 요소를
탑 요소
라고 부른다.
파이썬 구현 예시
스택도 리스트를 통해 구현할 수 있다.
stack = []
# 데이터 삽입
stack.append(1)
stack.append(2)
stack.append(3)
# 데이터 삭제
top_element = stack.pop()
print(stack.pop()) # 출력: 3
stack.pop()
print(stack.pop())
🐨백준 10828 스택 문제 풀어보기
N = int(input())
stack = []
for _ in range(N):
command = input().split()
if command[0] == "push":
elif command[0] == "pop":
elif command[0] == "size":
elif command[0] == "empty":
elif command[0] == "top":
else:
3. 큐 (Queue)
개념
큐는 선입선출(FIFO, First In First Out) 원칙을 따르는 자료구조이다. 먼저 삽입된 데이터가 먼저 삭제된다.
특징
- 삽입:
append
로 데이터를 삽입한다. - 삭제:
popleft
로 데이터를 삭제한다.
파이썬 구현 예시
큐는 리스트를 써서 구현할 수 있지만, 느려지기 때문에 일반적으로 deque라이브러리를 써서 구현한다.
from collections import deque
queue = deque()
# 데이터 삽입
queue.append(1)
queue.append(2)
queue.append(7)
queue.append(2)
# 데이터 삭제
front_element = queue.popleft()
print(front_element) # 출력: 1
4. 덱 (Deque)
개념
덱은 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조이다. 큐의 일반화된 형태로, 앞뒤 어디서나 데이터를 삽입하거나 삭제할 수 있다.
특징
- 양방향 삽입/삭제:
append
,appendleft
,pop
,popleft
로 데이터를 관리할 수 있다. - 유연성: 큐와 스택의 기능을 모두 제공한다.
파이썬 구현 예시
덱도 리스트를 써서 구현할 수 있지만, 느려지기 때문에 일반적으로 deque라이브러리를 써서 구현한다.
from collections import deque
deque_obj = deque()
# 데이터 양쪽 삽입
deque_obj.append(1)
deque_obj.appendleft(2)
# 데이터 양쪽 삭제
right_element = deque_obj.pop()
left_element = deque_obj.popleft()
print(right_element) # 출력: 1
print(left_element) # 출력: 2
![](https://blog.kakaocdn.net/dn/bJjQKW/btsI5WOMzIM/RP26V2RBHpf19um0jJJRQ1/img.png)
https://docs.python.org/ko/3/library/collections.html#collections.deque
collections — Container datatypes
Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple.,,...
docs.python.org