데이터 구조-이중 연결 목록

이중 연결 목록은 단일 연결 목록에 비해 앞뒤로 쉽게 탐색 할 수있는 연결 목록의 변형입니다. 다음은 이중 연결 목록의 개념을 이해하는 데 중요한 용어입니다.

  • Link − 링크드리스트의 각 링크는 요소라는 데이터를 저장할 수 있습니다.

  • Next − 링크 된 목록의 각 링크는 다음이라는 다음 링크에 대한 링크를 포함합니다.

  • Prev − 링크 된 목록의 각 링크는 이전 링크 인 Prev에 대한 링크를 포함합니다.

  • LinkedList − Linked List에는 First라는 첫 번째 링크와 Last라는 마지막 링크에 대한 연결 링크가 포함되어 있습니다.

이중 연결 목록 표현

위의 그림에 따라 고려해야 할 중요한 사항은 다음과 같습니다.

  • 이중 연결 목록에는 첫 번째와 마지막이라는 링크 요소가 있습니다.

  • 각 링크에는 데이터 필드와 next 및 prev라는 두 개의 링크 필드가 있습니다.

  • 각 링크는 다음 링크를 사용하여 다음 링크와 연결됩니다.

  • 각 링크는 이전 링크를 사용하여 이전 링크와 연결됩니다.

  • 마지막 링크는 목록의 끝을 표시하기 위해 링크를 null로 전달합니다.

기본 작동

다음은 목록에서 지원하는 기본 작업입니다.

  • Insertion − 목록 시작 부분에 요소를 추가합니다.

  • Deletion − 목록의 시작 부분에있는 요소를 삭제합니다.

  • Insert Last − 목록 끝에 요소를 추가합니다.

  • Delete Last − 목록 끝에서 요소를 삭제합니다.

  • Insert After − 목록의 항목 뒤에 요소를 추가합니다.

  • Delete − 키를 사용하여 목록에서 요소를 삭제합니다.

  • Display forward − 전체 목록을 순방향으로 표시합니다.

  • Display backward − 전체 목록을 역순으로 표시합니다.

삽입 작업

다음 코드는 이중 연결 목록의 시작 부분에 삽입 작업을 보여줍니다.

//insert link at the first location
void insertFirst(int key, int data) {

   //create a link
   struct node *link = (struct node*) malloc(sizeof(struct node));
   link->key = key;
   link->data = data;
	
   if(isEmpty()) {
      //make it the last link
      last = link;
   } else {
      //update first prev link
      head->prev = link;
   }

   //point it to old first link
   link->next = head;
	
   //point first to new first link
   head = link;
}

삭제 작업

다음 코드는 이중 연결 목록의 시작 부분에서 삭제 작업을 보여줍니다.

//delete first item
struct node* deleteFirst() {

   //save reference to first link
   struct node *tempLink = head;
	
   //if only one link
   if(head->next == NULL) {
      last = NULL;
   } else {
      head->next->prev = NULL;
   }
	
   head = head->next;
	
   //return the deleted link
   return tempLink;
}

작업 종료시 삽입

다음 코드는 이중 연결 목록의 마지막 위치에서 삽입 작업을 보여줍니다.

//insert link at the last location
void insertLast(int key, int data) {

   //create a link
   struct node *link = (struct node*) malloc(sizeof(struct node));
   link->key = key;
   link->data = data;
	
   if(isEmpty()) {
      //make it the last link
      last = link;
   } else {
      //make link a new last link
      last->next = link;     
      
      //mark old last node as prev of new link
      link->prev = last;
   }

   //point last to new last node
   last = link;
}

C 프로그래밍 언어로 구현 된 내용을 보려면 여기 를 클릭하십시오 .