본문 바로가기
자료구조

연습문제와 응용예제

by Benihs 2022. 10. 13.

 1  연습문제

** 문제는 처음에 언급한 책에 나와있습니다 **

답 :

1. (1)선형 리스트 (2) 단순 연결 리스트

2. 3번

3. (a) 데이터 (b) 링크

4. 3번

5. (b) - (a) - (c)

6. 4번

7. (1) node.data (2) node.link (3) node

8. 2번

 

 2  응용예제 01

사용자가 이름과 이메일을 입력하면 이메일 순서대로 단순 연결 리스트를 생성하는 프로그램

## 클래스와 함수 선언 부분 ##
class Node():
    def __init__(self):
        self.data = None
        self.link = None

def printNodes(start):
    current = start
    if current == None:
        return
    print(current.data, end=' ')

    while current.link != None:
        current = current.link
        print(current.data, end=' ')
    print()

def makeSimpleLinkedList(nameEmail):
    global memory, head, current, pre


    node = Node()
    node.data = nameEmail
    memory.append(node)

    if head == None:        #첫 번째 노드일 때
        head = node
        return

    # 첫 번째 노드보다 작을 때
    if head.data[1] > nameEmail[1]:
        node.link = head
        head = node
        return

    # 중간 노드로 삽입하는 경우
    current = head
    while current.link != None:
        pre = current
        current = current.link
        if current.data[1] > nameEmail[1]:
            pre.link = node
            node.link = current
            return

    # 삽입하는 노드가 가장 큰 경우
    current.link = node

## 전역 변수 선언 부분 ##
memory = []
head, current, pre = None, None, None

## 메인 코드 부분 ##
if __name__ == "__main__":

    while True :

        name = input("이름--> ")
        if name == "" or name == None :
            break

        email = input("이메일 ")
        makeSimpleLinkedList([name,email])
        printNodes(head)

 

 3  응용예제 02

1~ 45 숫자 6개를 뽑는 로또 추첨 프로그램

import random

## 클래스와 함수 선언 부분 ##
class Node():
    def __init__(self):
        self.data = None
        self.link = None

def printNodes(start):
    current = start
    if current == None:
        return
    print(current.data, end=' ')
    while current.link != None:
        current = current.link
        print(current.data, end=' ')
    print()

def makeList(num):
    global memory, head, pre, current

    node = Node()
    node.data = num
    memory.append(node)
    #첫번째 노드
    if head == None :
        head = node
        return

    if head.data > num:
        node.link = head
        head = node
        return

    current = head
    while current.link != None:
        pre = current
        current = current.link
        if current.data > num:
            pre.link = node
            node.link = current
            return
    current.link = node

def findNum(num):
    global memory,head, current, pre

    if head == None :
        return False
    current = head
    if current.data ==num:
        return True
    while current.link != None:
        current = current.link
        if current.data == num:
            return True
    return False

## 전역 변수 선언 부분 ##
memory = []
head, current, pre = None, None, None

## 메인 코드 부분 ##
if __name__ == "__main__":

    Count = 0
    while True:
        lotto = random.randint(1,45)
        if findNum(lotto):
            continue
        Count += 1
        makeList(lotto)
        if Count >= 6:
            break
    printNodes(head)