U E D R , A S I H C RSS

Data Structure/List



1. ๋ฆฌŠคŠธ


  • ๋ฆฌŠคŠธ๋ž€ ๋ฌด—‡ธ๊ณ  •˜๋‹ˆ...  €žฅ•˜๊ณ  ‹ถ€ ๋ฐด„™€ ๋‹คŒ ๋ฐด„ฐ๋ฅผ ๊ฐ€๋ฅด‚ค๋Š” ฌธ„ฐ๋ฅผ ๊ตฌกฐฒด๋กœ ๋ฌถ€ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋ณธœผ๋กœ •ด„œ ๋ง‰~ —ฐ๊ฒฐ‹œผœค€ ๊ฒƒด๋‹ค.

~cpp 
struct Node    //  œ๊ฐ€ c๋ฌธ๋ฒ•„ ž˜ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.. …—„œ๋Š” typedefธ๊ฐ€? ดƒ•œ๊“ฐ๋”๊ตฐš”.
{
    int lalala;    // ๋„ฃ๊ณ  ‹ถ€ ๋ฐด„ฐ
    Node* Next_ptr;   // ๋‹คŒ ๋ฐด„ฐ๋ฅผ ๊ฐ€๋ฅด‚ค๋Š” ฌธ„ฐ
};

c ๋ฌธ๋ฒ•œผ๋กœ •˜๋ฉด.
~cpp 
typedef struct {
	int data;
	Node * link;
} Node;

  • ๋ฆฌŠคŠธ๋ฅผ ‚ฌšฉ•˜๋Š” ๊ฐ„๋‹จ•œ ˜ˆ

~cpp 
...
Node* kkk=new Node;   // ๋™  ƒ„
kkk->lalala=100;      // kkk˜ ๋ฉค๋ฒ„ lalala— 100„„Œ.
Node* hhh=new Node;   // ƒˆ๋กญ๊ฒŒ ๋™  ƒ„
kkk->Next_ptr=hhh;    // kkk˜ ๋ฉค๋ฒ„ Next_ptrด ๋‹คŒ ๋…ธ๋“œธ hhh๋ฅผ ๊ฐ€๋ฅด‚ค๊ฒŒ •จ
hhh->lalala=50;       // hhh— ๋ฐด„ฐ ๋„Œ
hhh->Next_ptr=NULL;   // hhh๋’ค— •„๋ฌด๊ฒƒ๋„ —†œผ๋‹ˆ ๋‹คŒ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฅด‚ค๋Š” ฌธ„ฐ๋ฅผ NULL๋กœ „ ••จ
...
...
delete kkk;           // new๋กœ •œ๊ด ๊ผญ delete๋กœ ง€›Œฃผž
delete hhh;

  • œ„™€ ๊ฐ™ด ๋‹คŒ ๋˜๋Š” ๋จผ €๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฅด‚ค๋Š” ฌธ„ฐ๊ฐ€ •˜๋‚˜๋งŒ žˆ๋Š” ๊ฒƒ„ Single Linked List๋ผ๊ณ  •œ๋‹ค.
  • ๋ฐ˜๋ฉด— ๋‘˜ ๋‹ค žˆ๋Š” ๊ฒƒ„ Double Linked List๋ผ •œ๋‹ค.
  • Single Linked List—„œ๋Š” •œ ชฝœผ๋กœ๋งŒ ด๋™ด ๊ฐ€๋Šฅ•˜๊ธฐ ๋•Œ๋ฌธ— ๋ฉ€๋ฆฌ žˆ๋Š” ๋…ธ๋“œ๋ฅผ ฐพ•„๊ฐ€๋Š”๋ฐ— ‹œ๊ฐ„ด ข€ ˜ค๋ž˜๊ธ๋ฆฐ๋‹ค.
  • ด๋ฅผ ๋ณด™„•˜๊ธฐ œ„•ด ๋‚˜˜จ ๊ฒƒด Double Linked Listด๋‹ค.
  • Double Linked List—„œ๋Š” ๋งจ ๋งˆง€๋ง‰ ๋…ธ๋“œ˜ ๋‹คŒ ๋…ธ๋“œ๊ฐ€ NULLด •„๋‹Œ ๋งจ ฒ˜Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฅด‚จ๋‹ค.
  • ๋งˆฐฌ๊ฐ€ง€๋กœ ๋งจ ฒ˜Œ ๋…ธ๋“œ˜ •ž ๋…ธ๋“œ๋Š” ๋งจ ๋งˆง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค.
  • ๊ฒฐ๋ก  œผ๋กœ Single€ ฒดธ๋ชจ–‘ Double€ ๊ณ ๋ฆฌ๋ชจ–‘ด ๋œ๋‹ค.

  • Double Linked List๋ฅผ ‚ฌšฉ•œ ๊ฐ„๋‹จ•œ ˜ˆ(3๊ฐœ˜ ๋…ธ๋“œ๋ฅผ ˜ˆ๋กœ ๋“ฌ)

~cpp 
struct Node
{
    int lalala;
    Node* Next_ptr;
    Node* Prev_ptr;
};

...

Node* Head=new Node; // 1 ๋…ธ๋“œ ๋™  ƒ„
Node* Mid=new Node;  // 2 ๋…ธ๋“œ ๋™  ƒ„
Node* Tail=new Node; // 3 ๋…ธ๋“œ ๋™  ƒ„
Head->Next_ptr=Mid;  // 1 ๋…ธ๋“œ˜ ๋‹คŒ ๋…ธ๋“œ๋Š” 2๋…ธ๋“œ
Mid->Next_ptr=Tail;  // 2 ๋…ธ๋“œ˜ ๋‹คŒ ๋…ธ๋“œ๋Š” 3๋…ธ๋“œ
Tail->Next_ptr=Head; // 3 ๋…ธ๋“œ˜ ๋‹คŒ ๋…ธ๋“œ๋Š” 1๋…ธ๋“œ
Head->Prev_ptr=Tail; // 1 ๋…ธ๋“œ˜ •ž ๋…ธ๋“œ๋Š” 3๋…ธ๋“œ
Mid->Prev_ptr=Head;  // 2 ๋…ธ๋“œ˜ •ž ๋…ธ๋“œ๋Š” 1๋…ธ๋“œ
Tail->Prev_ptr=Mid;  // 3 ๋…ธ๋“œ˜ •ž ๋…ธ๋“œ๋Š” 2๋…ธ๋“œ

...

  • žฅ  : ๋น ๋ฅด๋‹ค. (๋ฐฐ—ด ๊ฐ™€ ๊ฒฝšฐ๋Š” ค‘๊ฐ„— •˜๋‚˜ ง€šฐ๊ณ  ๋‚˜๋ฉด ๊ทธ ๋’ค—๊ป„ ๋‹ค •žœผ๋กœ ๋•ก๊ฒจ•ผ •œ๋‹ค. ˆ˜–‰‹œ๊ฐ„  ˆ๋ผ ˜ค๋ž˜ ๊ธ๋ฆฐ๋‹ค. •˜ง€๋งŒ ๋ฆฌŠคŠธ๋Š” ๋‹คŒ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌ‚ค๋Š” ฌธ„ฐ๋งŒ ๋ฐ”๊ฟ”ฃผ๋ฉด ๋œ๋‹ค.)
  • ๋‹จ  : ž˜๋ชป๋œ ฌธ„— ˜•œ Memory Leak ด ๋ฐœƒ•  ˆ˜ žˆ๋‹ค.

2. ž๋ฐ”๋กœ ง  ๋งฌ๋“œ ๋ฆฌŠคŠธ(c++๋กœ งœ๋‹ค๊ฐ€ ๊ฐ‘ž๊ธฐ ๋น„ก€”จ๊ฐ€ ๋ป—–ด„œ ๋‹ค ๋‚ ๋ผ๊ฐ”Œ..--; ˜ˆ••˜ฌ๋ผ„œ ˆ™ œ๋กœ ๋‚ด๋ ค๋˜ ž๋ฐ” ๋งฌ๋“œ ๋ฆฌŠคŠธ๋ฅผ  ๊ฒ Œ

~cpp 
import java.io.*;

class Node
{
	private int ndata;
	public Node pNext=null;
	
	public Node(int ndata)
	{
		this.ndata=ndata;
	}

	public int getData()
	{
		return ndata;
	}
}

class MyLinkedList
{
	private Node pHead;
	private Node pTail=null;
	private static int nNumber=0;

	public MyLinkedList()
	{
		pHead=new Node(0);
	}
	
	public void insertNode(int ndata,int nSequence)
	{
		Node pNew=new Node(ndata);

		if(nNumber==0)
			pHead.pNext=pNew;

		Node pTemp=new Node(0);
		pTemp=pHead;
		for(int i=0;i<nSequence;i++)
			pTemp=pTemp.pNext;

		pNew.pNext=pTemp.pNext;		
		pTemp.pNext=pNew;
			
		nNumber++;
	}

	public boolean deleteNode(int nSequence)
	{
		if(nNumber<nSequence)
		{
			System.out.println(" €žฅ๋œ ๋ฐด„–‘„ ˆ๊ณผ•˜๋Š” ธ๋Šคž…๋‹ˆ๋‹ค!");
			return false;
		}

		Node pTemp=new Node(0);
		Node pTemp2=new Node(0);
		pTemp=pHead;

		for(int i=0;i<nSequence-1;i++)
			pTemp=pTemp.pNext;

		pTemp2=pTemp.pNext;
		pTemp.pNext=pTemp2.pNext;
	
		nNumber--;
	
		return true;
	}

	public void showData()
	{
		Node pTemp=new Node(0);
		pTemp=pHead;
		int data;

		if(nNumber==0)
			System.out.println(" €žฅ๋œ ๋ฐด„ฐ๊ฐ€ —†Šต๋‹ˆ๋‹ค!");
		
		for(int i=0;i<nNumber;i++)
		{
			pTemp=pTemp.pNext;
			data=pTemp.getData();
			System.out.println(data);
		}
	}

	public void showMenu()
	{
		System.out.println("1. Add");
		System.out.println("2. Delete");
		System.out.println("3. Show");	
		System.out.println("4. End");
		System.out.print("Select the Menu : ");
	}

	public static void main(String args[])
	{
		MyLinkedList ll=new MyLinkedList();
                  /// ด๋ถ€๋ถ„— ๋ฉ”๋‰ด๋ฅผ ๋„ฃ๋“  •จˆ˜ ˜ธถœ„ •˜๋“  ๋งˆŒ๋Œ€๋กœ..
	}
}
  • ๋ญ”๊ฐ€ ๊ต‰žฅžˆ ดƒ•˜๊ตฐš”..;  œ๊ฐ€ ๋ด๋„..;; ๊ต‰žฅžˆ กฐžก•˜๊ณ  ๊ต‰žฅžˆ —ˆ ‘•œ.. ๊ทธ๋Ÿฐ ดƒ•œ ฝ”๋“œ ๊ฐ™Šต๋‹ˆ๋‹ค.; ž๋ฐ”๋Š” ฒจด๋ผ„œ ๊ทธ๋Ÿฐ๊ฐ€..;
  • LinkedList๊ฐ€ ข…๋‹จ ๋ถ€๋ถ„—„œ๋งŒ ถ”๊ฐ€,‚ญ œ๊ฐ€ ๋˜๋Š”๊ฒŒ •„๋‹Œ •„๋ฌด๋ฐ„œ๋‚˜ ๋˜•ผ •˜๋”๊ตฐ—ฌ. ๊ทธ๋ž˜„œ ๊ทธ๊–ด๋–ป๊ฒŒ  ••ด„๊นŒ ๊ณ ๋ฏผ•˜๋‹ค๊ฐ€ ๋ฐด„˜ ˆœ„œ๋กœ •˜๊ธฐ๋กœ –ˆŠต๋‹ˆ๋‹ค.

= ž๋ฐ”๋กœ ง  ๋งฌ๋“œ ๋ฆฌŠคŠธ..2 (๋ˆ„๊ฐ€ •œ๊ธ๊นŒ) ƒ˜‘ธ๊ฐ€?=
~cpp 

†Œ๋“œ ๋‹ค  œผ๋ฉด •„๋ฌด๋„ •ˆ๋ณผ๊ฐ ๊ฐ™•„„œ.. 

ธ„Ž˜ดŠค™€ ๊ฐœ๋žต ธ •Œ๊ณ ๋ฆฌฆ˜๋งŒ  ๊ฒ Šต๋‹ˆ๋‹ค.

 œ๊ฐ€ ž๋ฐ”๋กœ ๋งฌ๋“œ ๋ฆฌŠคŠธ งค๋•Œ  œผ ๊ณ ๋ฏผ•œ  ด ๋…ธ๋“œ๋ฅผ ถ”๊ฐ€• ๋•Œ๋งˆ๋‹ค

 „ฒด ๋…ธ๋“œ˜ ฌ๊ธฐ๊ฐ€ ๋ฐ”๋€Œ๋Š”  „ ๊ณ ๋ฏผ ๋งŽด –ˆŠต๋‹ˆ๋‹ค.

๊ทธ๋ž˜„œ •œ๊ฒƒด ๋…ธ๋“œ๋ฅผ ถ”๊ฐ€• ๋•Œ๋งˆ๋‹ค  „ฒด ๋…ธ๋“œ๋ฅผ ๋‹ค‹œ ๋งŒ๋“œ๋Š” ๊ฒƒด—ˆŠต๋‹ˆ๋‹ค.

(ž๋ฐ”˜ Vector ด๋ž˜Šค—„œ ด๋ ‡๊ฒŒ –ˆ๋‹ค๊ณ  –ผ• ๋“ฃ–ด„œ...)
===> ๊ทธ ž‘—…ด •„๋ž˜— žˆŠต๋‹ˆ๋‹ค.
    boolean Add_ToSpecial(int coordi, int in) //Šน ••œ œ„น˜— ž๋ฃŒ๋ฅผ  €žฅ•˜๋Š” ๋ฉ”†Œ๋“œ
    {
       if(coordi <0 || coordi >= m_Node.length)  //ขŒ‘œ๋Š” 0๋ถ€„‹œž‘๋จ, ž…๋ ฅ œ„น˜๊ฐ€ •ด๋‹น ๋ฒ”œ„๋ฅผ ๋ฒ‹–ด๋‚  ๊ฒฝšฐ
            return false;
       Node tempNode[] = new Node[m_Node.length+1]; //m_Node— •˜๋‚˜˜ ž๋ฃŒ๋ฅผ ๋” ๋„ฃ๊ธฐ œ„•ด„œ ด๋ณด๋‹ค 
                                                         //•˜๋‚˜˜ ๊ณต๊ฐ„ด ๋” ๋งŽ€ ž„‹œ ๋ฐฐ—ด„ ƒ„•œ๋‹ค.
        for(int i=0;i<tempNode.length-1 && i<coordi;i++)  //tempNode— m_Node๋ฅผ šฐ„  coordi๋ฒˆงธ(0๋ถ€„‹œž‘•ด„œ)  „˜ ž๋ฆฌ
            tempNode[i] = m_Node[i];   //๊นŒง€ ๋ณต‚ฌ •œ๋‹ค.
       Node tem = new Node();  //ž„‹œ ๋…ธ๋“œ ƒ„
       tem.item = in;
       tem.next =  m_Node[coordi];  //๋‚€ ๊ณณ— ›๋ž˜ žˆ—ˆ๋˜ ž๋ฃŒ๋ฅผ ฐธกฐ•œ๋‹ค. 
       tempNode[coordi] = tem;
       tempNode[coordi-1].next = tempNode[coordi];  //๋‚€ ๊ณณ˜ ๋ฐ”๋กœ •ž— žˆ๋Š” ž๋ฃŒ๊ฐ€ ฒจ๊ฐ€•œ ž๋ฃŒ๋ฅผ ฐธกฐ•˜๊ฒŒ •œ๋‹ค.
       for(int j = coordi+1; j<tempNode.length-1;j++)
              tempNode[j] = m_Node[j-1];
        m_Node = new Node[tempNode.length];  // m_Node˜ ฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฐ›„ tempNode๋ฅผ ๋„ฃ๋Š”๋‹ค.
        for(int i=0;i<tempNode.length;i++)  // m_Node — tempNode๋ฅผ ๋ณต‚ฌ•œ๋‹ค.
             m_Node[i] = tempNode[i];
        return true;                 
    }
//////////////////////////

//๋…ธ๋“œ ด๋ž˜Šค ๋ชจŠต๊ณผ ธ„Ž˜ดŠค
class Node {            //Node ด๋ž˜Šค
    public int item;
    public Node next;
}
void Add_ToFront(int n)
void Add_ToRear(int n) 
boolean Add_ToSpecial(int coordi, int in)
boolean IsEmpty()
boolean Delete_Front() 
boolean Delete_Rear()
boolean Delete_Special(int coordi)
void PrintAll() 



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:05
Processing time 0.0138 sec