LinkedList (1)
데이터를 동적으로 할당하는 linkedList에 대해서 알아보기 전에 간단하게 그 컨셉에 대해 구현해보았다.
-동적할당 linkedList의 c구현
-데이터를 저장할 node라는 구조체는 다음 노드를 가리키는 next와 데이터를 담을 멤버를 가지고 있다.
- 다음으로 main에 노드에 데이터를 추가하고, 삭제하고, 출력하는 과정을 구현하였다.
1. 데이터 추가
>데이터를 담은 newnode 생성
-첫 데이터 추가-
>head에 아무런 데이터가 없다면, head = newnode
>tail도 newnode를 가리키게 되면서 head=tail은 같다.
-다음 데이터 추가-
>기존 tail->next를 newnode와 연결한다.
> tail =newnode가 되면서 배열의 끝을 계속 지정한다.
2. 데이터 출력
> node 포인터 cur이 head를 가리키게 한다.
> 첫 데이터를 출력하고 > cur = cur->next를 계속하면서 cur->next가 null이 될 때까지 반복한다.
3. 데이터 삭제
> delnode가 head를 가리키게 한다.
> delnext가 head->next를 가리키게한다.
>첫 데이터 삭제 후 delnext가 null까지 delnode = delnext, delnext = delnext->next를 반복한다.
*바로 head를 삭제하고 head = head->next를 하지 못하는 이유는 이미 head가 가리키는 node를 free하면, head->next도 접근할 수 없게되므로, 두 변수를 따로 추가해서 삭제한다.
->자바를 이용한 구현
import java.util.Scanner;
class node<T>{
private T data;
private node next;
public node(T data, node next){
this.data = data;
this.next = next;
}
public void setNext(node next){
this.next = next;
}
public void setData (T data){
this.data = data;
}
public T getdata() {return this.data; }
public node getNode() {return this.next;}
}
public class ListTEST1 {
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
node<Integer> head = null;
node<Integer> tail = null;
node<Integer> cur =null;
node<Integer> newnode;
while(true){
System.out.print("숫자를 입력하세요 종료하려면 0 : ");
int x;
if((x=sc.nextInt()) == 0) break;
newnode = new node<>(x,null);
if(head == null){
head=newnode;
}else {
tail.setNext(newnode);
}
tail = newnode;
}
//데이터 출력
System.out.print("입력 받은 데이터 전체 출력");
System.out.println();
if(head == null) System.out.print("출력할 데이터가 없습니다.");
else {
cur = head;
System.out.print(cur.getdata()+" "); //newnode가 1개일 수 있음
while(cur.getNode() != null){
cur = cur.getNode();
System.out.print(cur.getdata()+" ");
}
}
System.out.println();
//메모리 해체과정
if(head ==null) return;
else{
node<Integer> deleteNode = head;
node<Integer> delNext = head.getNode();
System.out.printf("%d 데이터를 삭제합니다.\n",deleteNode.getdata());
deleteNode =null;
while(delNext != null){
deleteNode = delNext;
delNext = delNext.getNode();
System.out.printf("%d 데이터를 삭제합니다.\n",deleteNode.getdata());
deleteNode =null;
}
}
}
}
-참고자료 : 열혈자료구조 - 윤성우
https://velog.io/@yeonjuu417/Linked-List-Hash-Table
[Data Structure]Linked List
1. 링크드 리스트 연결리스트는 그 크키가 동적인 자료구조입니다. 자료구조를
velog.io