• [์ž๋ฃŒ๊ตฌ์กฐ] ์„ ํ˜•๋ฆฌ์ŠคํŠธ(liner list)=์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ(Sequential List)์˜ ๊ฐœ๋…๊ณผ ๊ตฌํ˜„ by python

    2024. 1. 26.

    by. @leeeun

    ์„ ํ˜• ๋ฆฌ์ŠคํŠธ

     

    ์„ ํ˜•๋ฆฌ์ŠคํŠธ์˜ ๊ธฐ๋ณธ

     

    ์„ ํ˜• ๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ๋…

    • ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ •ํ•œ ์ˆœ์„œ๋กœ ๋‚˜์—ดํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
    • =์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ(Ordered List)
    • ์ž…๋ ฅ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ์ ํ•ฉํ•˜๋‹ค.
    • ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (ํŒŒ์ด์ฌ์˜ ์ž๋ฃŒํ˜•์—์„œ๋Š” List)
    • ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋„ ์ €์žฅ๋  ๋•Œ ์‹œ์ž‘ ์œ„์น˜๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ, ๋นˆ์ž๋ฆฌ ์—†์ด ์ €์žฅ๋œ๋‹ค.

     

    ์„ ํ˜•๋ฆฌ์ŠคํŠธ์˜ ์›๋ฆฌ

     

    ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

    • ์ƒˆ๋กœ์šด ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๋ฉด, ์‚ฝ์ž…ํ•  ์ž๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ์‚ฝ์ž…ํ•  ์œ„์น˜ ์ดํ›„์˜ ์›์†Œ๋“ค์„ ๋ชจ๋‘ ํ•œ ์ž๋ฆฌ์”ฉ ๋’ค๋กœ ์˜ฎ๊ฒจ์•ผํ•œ๋‹ค.
    • โ‘  ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋นˆ ์ž๋ฆฌ ๋งŒ๋“ค๊ธฐ (์‚ฝ์ž…ํ•  ์ž๋ฆฌ ์ดํ›„์˜ ์›์†Œ๋“ค์„ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ์ด๋™)
    • โ‘ก ๋นˆ ์ž๋ฆฌ์— ์›์†Œ ์‚ฝ์ž…ํ•˜๊ธฐ

    ์‚ฝ์ž…ํ•  ์ž๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ž๋ฆฌ ์ด๋™ ํšŸ์ˆ˜

    • N ๊ฐœ์˜ ์›์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ์„ ํ˜• ๋ฆฌ์ŠคํŠธ์—์„œ ์ธ๋ฑ์Šค K์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ
    • ๋งˆ์ง€๋ง‰ ์›์†Œ์˜ ์ธ๋ฑ์Šค - ์‚ฝ์ž…ํ•  ์ž๋ฆฌ์˜ ์ธ๋ฑ์Šค + 1 -> (N - 1) - K + 1

    ๋ฐ์ดํ„ฐ ์‚ญ์ œ

    • ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด, ์‚ญ์ œํ•œ ์ดํ›„์— ๋นˆ์ž๋ฆฌ๋ฅผ ์ฑ„์›Œ์ฃผ๊ธฐ ์œ„ํ•ด , ์‚ญ์ œํ•œ ์œ„์น˜ ์ดํ›„์˜ ์›์†Œ๋“ค์„ ๋ชจ๋‘ ํ•œ ์ž๋ฆฌ์”ฉ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์•ผํ•œ๋‹ค.
    • โ‘  ์›์†Œ ์‚ญ์ œํ•˜๊ธฐ
    • โ‘ก ์‚ญ์ œํ•œ ๋นˆ ์ž๋ฆฌ ์ฑ„์šฐ๊ธฐ (์‚ญ์ œํ•œ ์ž๋ฆฌ ์ดํ›„์˜ ์›์†Œ๋“ค์„ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ์ด๋™)

    ์‚ญ์ œํ›„, ๋นˆ ์ž๋ฆฌ๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•œ ์ž๋ฆฌ ์ด๋™ ํšŸ์ˆ˜

    • N๊ฐœ์˜ ์›์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ์„ ํ˜• ๋ฆฌ์ŠคํŠธ์—์„œ ์ธ๋ฑ์Šค K์˜ ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ
    • ๋งˆ์ง€๋ง‰ ์›์†Œ์˜ ์ธ๋ฑ์Šค - ์‚ญ์ œํ•œ ์ž๋ฆฌ์˜ ์ธ๋ฑ์Šค -> (N - 1) - K

    ๋ฐ์ดํ„ฐ ํƒ์ƒ‰

    • ์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์›์†Œ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ๋Š” ์‚ฝ์ž…, ์‚ญ์ œ์—๋Š” ๋น„ํšจ์œจ์ ์ด์ง€๋งŒ ํƒ์ƒ‰์—๋Š” ํšจ์œจ์ ์ด๋‹ค!

     

    ์„ ํ˜•๋ฆฌ์ŠคํŠธ์˜ ๊ตฌํ˜„

    • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๋ณ€์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฒ”์šฉ์  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.
    • ๋ฐฐ์—ด์˜ ๋งจ ๋ ์œ„์น˜๋Š” len(๋ฐฐ์—ด์ด๋ฆ„)-1๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ๋งจ ๋’ค ์‚ฝ์ž…

    1๏ธโƒฃ ๋ฐฐ์—ด ๋งจ๋’ค์— ๋นˆ์นธ ์ถ”๊ฐ€

    2๏ธโƒฃ ๋ฐฐ์—ด ๊ธธ์ด ํ™•์ธ

    3๏ธโƒฃ (๋ฐฐ์—ด ๊ธธ์ด-1) ์œ„์น˜์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

     

    ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

    1๏ธโƒฃ ์„ ํ˜• ๋ฆฌ์ŠคํŠธ์— ๋นˆ์นธ์„ ์ถ”๊ฐ€

    2๏ธโƒฃ n๋ฒˆ์งธ(๋งˆ์ง€๋ง‰) ์ž๋ฆฌ์— n-1๋ฒˆ์จฐ ๊ฐ’์„์„ ๋„ฃ๊ณ , n-1๋ฒˆ์จฐ๋ฅผ ๋นˆ์นธ์œผ๋กœ ๋งŒ๋“ ๋‹ค

    3๏ธโƒฃ ์ง€์ •์œ„์น˜ ์นธ์œผ๋กœ ์œ„๋™ํ•  ๋•Œ๊นŒ์ง€ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณต ⇒ for๋ฌธ ์ด์šฉ

    4๏ธโƒฃ ์ง€์ •์œ„์น˜ ์นธ์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ์‚ฝ์ž…

     

    ๋ฐ์ดํ„ฐ ์‚ญ์ œ

    1๏ธโƒฃ ์ง€์ • ์œ„์น˜(x)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ

    2๏ธโƒฃ ์ง€์ • ์œ„์น˜ ๋ฐ”๋กœ ๋‹ค์Œ(x+1)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •์œ„์น˜(x) ์ž๋ฆฌ๋กœ ์ด๋™ํ•˜๊ณ  x+1์ž๋ฆฌ๋Š” ๋นˆ์นธ์œผ๋กœ ๋งŒ๋“ ๋‹ค.

    3๏ธโƒฃ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋กœ ์ด๋™ํ•  ๋•Œ๊นŒ์ง€ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค ⇒ for๋ฌธ

    4๏ธโƒฃ ๋ฐฐ์—ด์˜ ๋งจ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ์™„์ „ํžˆ ์ œ๊ฑฐํ•œ๋‹ค.

    #์„ ํ˜• ์ŠคํŠธ = ์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ (์ž…๋ ฅ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ) ์ฒ˜๋ฆฌ ํ”„๋กœ๊ทธ๋žจ
    
    #[1] ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
    
    #๋ฐฐ์—ด ์„ ์–ธ ์„ ํ˜•๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ -> ํŒŒ์ด์ฌ ๋ฐฐ์—ด๋กœ
    katok=[] 
    select=0
    
    # ๋ฐ์ดํ„ฐ ์‚ฝ์ž…ํ•จ์ˆ˜ 
    def add_data(friend):
        katok.append(None)
        length=len(katok)
        katok[length-1]=friend
    add_data("์„ฑ๋ฏผ")
    add_data("๋‹คํ˜„")
    add_data("๋‚˜์—ฐ")
    add_data("๋‚˜ํ˜„")
    add_data("๋ฏผ์˜")
    print(katok)
    
    # ๋ฐ์ดํ„ฐ ์‚ฝ์ž…ํ•จ์ˆ˜
    
    def insert_data(position,friend):
        if position<0 or position>len(katok):
            print("๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.")
            return
        
        katok.append(None) #๋นˆ ์ž๋ฆฌ ์‚ฝ์ž…
        length=len(katok) #ํ˜„์žฌ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ
        
        for i in range(length-1,position,-1):
            katok[i]=katok[i-1] # ๋นˆ ์ž๋ฆฌ์™€ ๊ตํ™˜ํ•ด์„œ ๋’ค๋กœ ๋ณด๋‚ด๊ธฐ
            katok[i-1]=None #์›๋ž˜ ์ž๋ฆฌ๋ฅผ ๋นˆ์นธ์œผ๋กœ
        
        katok[position]=friend #์ง€์ •ํ•œ ์œ„์น˜์— ์ƒˆ๋กœ์šด ๊ฐ’ ์ถ”๊ฐ€
        print(katok)
    
    # for i in range(๊ฐ’1, ๊ฐ’2, ๊ฐ’3)์—์„œ ๊ฐ’1๊ณผ ๊ฐ’2๊ฐ€ ๊ฐ™์œผ๋ฉด ํ•œ ๋ฒˆ๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    
    #์ž‘๋™ ํ…Œ์ŠคํŠธ
    insert_data(3,'๋‹ค์€')
    
    #[2] ๋ฐ์ดํ„ฐ ์‚ญ์ œ
    
    # ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ•จ์ˆ˜
    def delete_data(position):
        
        if position<0 or position>len(katok):
            print("๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.")
            return
        
        length=len(katok) #ํ˜„์žฌ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ
        katok[position]=None # ๋ฐ์ดํ„ฐ ์‚ญ์ œ
        
        for i in range(position+1,length):
            katok[i-1]=katok[i] # ๋’ค์˜ ๊ฐ’์„ ์•ž์œผ๋กœ ๋•ก๊ฒจ์˜ด
            katok[i]=None #๋’ท์ž๋ฆฌ๋ฅผ ๋‹ค์‹œ ๋นˆ์นธ์œผ๋กœ
        
        del(katok[length-1])
        print(katok)
        
    delete_data(2)
    
    # ๋ฉ”์ธ์ฝ”๋“œ
    
    if __name__=="__main__": # ๋ชจ๋“ˆ์ด ์•„๋‹Œ ํŒŒ์ด์ฌ ํŒŒ์ผ์„ ์ง์ ‘ ์‹คํ–‰ํ–ˆ์„ ๋•Œ๋งŒ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰
        while (select!=4):
            select=int(input("๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•˜์„ธ์š”. 1: ์ถ”๊ฐ€, 2: ์‚ฝ์ž…, 3:์‚ญ์ œ, 4:์ข…๋ฃŒ"))
            
            if (select==1):
                data=input("์ถ”๊ฐ€ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.")
                add_data(data)
                
            if (select==2):
                pos=int(input("์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”."))
                data=input("์‚ฝ์ž…ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.")
                insert_data(pos,data)
                
            if(select==3):
                pos=input("์‚ญ์ œํ•  ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.")
                delete_data(pos)
            
            elif(select==4):
                print(katok)
                exit
                2
                
            else:
                print("1~4 ์ค‘ ํ•˜๋‚˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.")
    

     

    ์„ ํ˜• ๋ฆฌ์ŠคํŠธ์˜ ์‘์šฉ

    • ์„ ํ˜• ๋ฆฌ์ŠคํŠธ๋Š” ๋‹คํ•ญ์‹์„ ์ €์žฅํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฐ์— ๋งŽ์ด ์‘์šฉ๋œ๋‹ค.

    ๋‹คํ•ญ์‹์˜ ์„ ํ˜• ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„๊ณผ ๊ณ„์‚ฐ ํ”„๋กœ๊ทธ๋žจ

    ## ํ•จ์ˆ˜ ์„ ์–ธ ๋ถ€๋ถ„ ## 
    def printPoly(t_x, p_x) :
    	polyStr = "P(x) = "
    	
    	for i in range(len(p_x)) :
    		term = t_x[i]	# ํ•ญ ์ฐจ์ˆ˜
    		coef = p_x[i]	# ๊ณ„์ˆ˜
    
    		if (coef >= 0) :		
    			polyStr += "+"
    		polyStr += str(coef) + "x^" + str(term) + " "
    
    	return polyStr
    
    def calcPoly(xVal, t_x, p_x) :
    	retValue = 0
    	
    	for i in range(len(px)) :
    		term = t_x[i]	# ํ•ญ ์ฐจ์ˆ˜
    		coef = p_x[i]	# ๊ณ„์ˆ˜
    		retValue += coef * xValue ** term
    
    	return retValue
    
    ## ์ „์—ญ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ถ€๋ถ„ ## 
    tx = [300, 20, 0]
    px = [7, -4, 5] 
    
    ## ๋ฉ”์ธ ์ฝ”๋“œ ๋ถ€๋ถ„ ## 
    if __name__ == "__main__" :
    
    	pStr = printPoly(tx, px)
    	print(pStr)
    
    	xValue = int(input("X ๊ฐ’-->"))
    
    	pxValue = calcPoly(xValue, tx, px)
    	print(pxValue)## ํ•จ์ˆ˜ ์„ ์–ธ ๋ถ€๋ถ„ ## 
    

     

     

    ์ฐธ๊ณ 

    [์ž๋ฃŒ๊ตฌ์กฐ] ์„ ํ˜• ๋ฆฌ์ŠคํŠธ (Linear List)

    [์ด๋ก ] 1. ๋ฆฌ์ŠคํŠธ (List) - ๋ฐฐ์—ด, ์ˆœ์ฐจ๋ฆฌ์ŠคํŠธ, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (Array, Array List, Linked List)

    [์ž๋ฃŒ๊ตฌ์กฐ] ์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ(Sequential List) - ์œค์ด๋„ค ์ˆ˜์„ ์ง‘ ๊ฐœ๋ฐœ์ผ๊ธฐ | Yun's SuSeon Blog

    ๋Œ“๊ธ€