Programming/Algorithm

선형 리스트 (Linear List)

Supreme_YS 2021. 9. 27. 20:14

-선형 리스트의 개념

선형 리스트는 데이터를 일정한 순서로 나열한 자료구조로, 순차 리스트라고도 한다. 선형 리스트는 입력 순서대로 저장하는 데이터에 적당하다. 예를 들면, 좋아하는 프로그래밍 언어 종류, 연락이 많이 온 친구 목록 등이 있다. 다양한 방법으로 구현할 수 있으나, 가장 기본적인 것은 배열(Array)을 이용하는 것이다. 

 

-선형 리스트의 원리

1. 데이터 삽입 : 빈칸 확보 -> 자리 이동 -> 데이터 삽입 

예. a - b - c 선형 리스트에 d를  b와 c 사이에 삽입? -> a - b - c - * (빈칸 확보) -> a - b - * - c (자리 이동) -> a - b - d - c (데이터 삽입)

 

2. 데이터 삭제 : 데이터 삭제 -> 자리 이동 -> 빈칸 제거

예. a - b - c - d 선형 리스트에서 b를 삭제? -> a - * - c - d (데이터 삭제) -> a - c - * - d -> a - c - d - * (자리 이동) -> a - c - d (빈칸 제거)

 

-기본 선형 리스트

* 선형 리스트 데이터 추가 함수 구현 부분

def add_data(value):
    # basicList에 None(빈) 공간 추가
    basicList.append(None)
    # basicLen 변수에 basicList의 길이(정수)만큼을 할당해줌
    basicLen = len(basicList)
    # basicList에서 길이-1 위치에 추가하고자 하는 값을 할당해줌
    basicList[basicLen-1] = value

* 선형 리스트 특정 위치 데이터 추가 함수 구현 부분

def insert_data(position, value):
    # 삽입하고자 하는 위치가 0보다 작거나 최대 길이를 벗어나면 예외 메시지 발생
    if position < 0 or position > len(basicList):
        print("범위를 벗어났습니다.")
        return
    
    # 초기 리스트에 빈 공간 추가
    basicList.append(None)
    # basicLen 변수에 현재 리스트의 길이(정수)를 할당
    basicLen = len(basicList)

    # 삽입 원리 (맨 뒤에 빈 공간 추가 -> 끝에 위치 부터 하나씩 우측으로 shift -> 원하는 삽입 위치 까지)
    # 따라서, 길이 끝에서 시작해서 지정 위치까지 한칸씩 줄여가면서 값 하나씩 이동
    for i in range(basicLen-1, position, -1):
        basicList[i] = basicList[i-1]
        basicList[i-1] = None
    # 지정 위치에 사용자 값 할당
    basicList[position] = value

* 선형 리스트 특정 위치 데이터 삭제 함수 구현 부분

def delete_data(position):
    if position < 0 or position > len(basicList):
        print("범위를 벗어났습니다.")
        return

    basicLen = len(basicList)
    basicList[position] = None # 데이터 삭제
    # 삭제 원리 (지정 위치 값 삭제 -> 지정 위치의 다음 값부터 왼쪽으로 shift -> 리스트 길이 만큼)
    # 따라서, 지정 위치에서 시작해서 리스트 끝까지 한칸씩 줄여가면서 값 하나씩 이동
    for i in range(position+1, basicLen):
        basicList[i-1] = basicList[i]
        basicList[i] = None

    # 배열 마지막 위치값 삭제
    del(basicList[basicLen-1])

* 전역 변수 선언 및 메인 코드 구현 부분

# 전역 변수 선언 부분
basicList=[]
select = -1 # 1: 추가, 2: 삽입, 3: 삭제, 4: 종료

# 메인 코드 부분
if __name__=="__main__":
    while (select != 4) :
        select = int(input("선택하세요(1: 추가, 2: 삽입, 3: 삭제, 4: 종료)--> "))
        if (select == 1):
            data = input("추가할 데이터--> ")
            add_data(data)
            print(basicList)
        elif (select == 2):
            pos = int(input("삽입할 위치--> "))
            data = input("추가할 데이터--> ")
            insert_data(pos, data)
            print(basicList)
        elif (select == 3):
            pos = int(input("삭제할 위치--> "))
            delete_data(pos)
            print(basicList)
        elif (select == 4):
            print(basicList)
            exit()
        else :
            print("1~4 중 하나를 입력하세요.")
            continue

'Programming > Algorithm' 카테고리의 다른 글

[백준] 2434번 : 별 찍기 - 1  (0) 2021.10.27
[백준] 3052번 : 나머지 (Java)  (0) 2021.10.27
[백준] 빠른 A+B (JAVA)  (0) 2021.10.20
알고리즘의 개념  (0) 2021.09.27
자료구조의 개념  (0) 2021.09.27