~cpp struct Node // 제가 c문법을 잘 모릅니다.. 책에서는 typedef인가? 이상한걸 쓰더군요. { int lalala; // 넣고 싶은 데이터 Node* Next_ptr; // 다음 데이터를 가르키는 포인터 };
~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;
~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노드 ...
~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(); /// 이부분에 메뉴를 넣든 함수 호출을 하든 마음대로.. } }
~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()