기본자료구조 실습

김동하·2023년 7월 26일

자료구조

목록 보기
5/9

배열

  • 리스트와 배열의 차이점
리스트배열
다양한종류의 데이터를 담을 수 있다
반복문을 사용하여 연산을 수행하기에 상대적으로 수행하는 속도가 느리다.
연산 처리 시 전체 리스트로 연산한다
동일한 종류의 데이터만 담을 수 있다
연속된 메모리에 데이터를 저장한다.
간단한 연산 처리가 가능하고 수행하는 속도가 빠르다
연산 처리시 각 요소별로 연산한다.
  • 파이썬에서는 numpy 라이브러리를 통하여 쉽게 구현가능
# 리스트
list_1 = [1,"가",3.14,["a","신호등","3"]]
print(list_1, type(list_1))

# 리스트로 1차원 배열 표현하기 : for 문 사용
list_1 = []
for i in range(1, 7):
    list_1.appned(i)
print(list_1, type(list_1))

# 하나의 리스트로 2차원 배열 표현하기 for 문 사용
list_1 = []
for i in range(2):
    list_1.append([0]*3)
print(list_1, type(list_1))

# 하나의 리스트로 2차원 배열 표현하기 for 문 사용
list_1 = [[0]*3 for i in range(3)] # list comprehension
print(list_1, type(list_1))

# 배열(1)
# 방법 1: 1차원 배열
import numpy as np
arr=np.arange(1, 7)
print(arr, type(arr))

# 방법 2: 1차원 배열
import numpy as np
arr=np.array([1,2,3,4,5,6])
print(arr, type(arr))

# 방법 3: 2차원 배열
import numpy as np
arr=np.array([[1,2],[3,4],[5,6]])

리스트와 배열의 차이점

# 방법 1 : for 문을 1번 사용해서 2차원 배열 만들기
arr1 = [[1,2],[3,4],[5,6]]
for i in arr1:
    print(i)
# 방법 2: for 문을 1번 사용해 2차원 배열 만들기
arr1=[[1,2],[3,4],[5,6]]
for i,j in arr1:
    print(i,j)
# 방법 3: while 문을 1번 사용해 2차원 배열 만들기
arr1=[[1,2],[3,4],[5,6]]
n=0
while n < len(arr1):
    i=arr1[n]
    print(i)
    n+= 1
# 방법 4: 중첩 반목분(2중 for문) 사용해 2차원 배열 만들기
arr1=[[1,2],[3,4],[5,6]]
for i in arr1:
    for j in i:
        print(j, end=" ")
    print('')

2차원 배열값 변경하기

arr1=[[1,2],[3,4],[5,6]]
for i in arr1:
    print(i)
print(arr1[1][1]) # arr[1,1]
arr1[1][1] = 10
arr1

1차원 배열값 추가하기

# 숫자 8,4,9,10을 arr2에 추가
arr2=[]

# 삽입1
for i in range(4):
    arr2.append(int(input()))
print(arr2)

# 삽입2
while True:
    i2 = int(input())

    if i2 = " ": # 스페이스 입력시 종료
        print("종료")
        break

    add_arr=int(input())

    arr2.insert(int(i2), add_arr)
    print(arr2)

1차원 배열값 삭제하기

arr3=[8,4,9,10]

while True:
    mode=int(input()) # 1: pop, 2:del, 3:remove
    if mode==1:
        t1=int(input())
        result=arr3.pop(t1)
        print(result)
        break
    elif model==2:
        t1=int(input())
        del(arr3[t1])
        print(arr3)
        break
    else:
        print(arr3)
        t1=int(input())
        arr3.remove(t1)
        print(arr3)
        break

연결 리스트

  • 연결 리스트(Linked List)는 리스트들이 연결되어 있다는 의미
  • 리스트들이 한 줄로 연결된 방식의 선형 자료 구조
  • 연결 리스트의 각 원소를 노드(node)라고 하고, 이 노드는 데이터와 뒤쪽 노드를 각리키는 주소(포인터)를 가지고 있다
  • 이때 바로 앞에 있는 노드를 앞쪽 노드, 뒤에 있는 노드를 뒤쪽 노드라고 한다
  • 시작 노드는 헤드(head)라고 한다.
A = {8:[65, 4], 4:[54, 9], 9:[12, None]}
print(A)

A[8][0]=65
A[8][1]=4 # 다음 데이터의 키
# 생략
A[9][1]=None

def SinglyLinkedList(A,root):
    head=root
    node_next=head

    while node_next!=None:
        node_value=A[node_next][0]
        node_next=A[node_next][1]
        print(f'value : {node_value}')

SingllyLinkedList(A, 8)
  • 연결리스트 2
a={"h":[8,"t"],"t":[4,"u"],"u":[9, None]}

# 노드 순회
def test1(a, root_key):
    head=root_key
    node_next=head
    while True:
        node_value = a[node_next][0]
        node_next = a[node_next][1]
        print(f"vlaue : {node_value}")

        if node_ndex == None:
            break
test1(a, "h")

0개의 댓글