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.0260 sec