Cohe

고급 연결 리스트 본문

자료구조론

고급 연결 리스트

코헤0121 2023. 3. 1. 10:22
728x90

연결리스트 처음과 마지막 노드 삽입/삭제

  • 연결리스트의 처음과 마지막에 노드를 삽입 삭제 할 경우 노드 수 n과 노드를 삭제하려면 앞 노드의 주소를 알아야한다
  • 시간 복잡도 → O(n)

원형 연결 리스트

정의

  • 연결리스트의 맨 끝 노드를 첫 번째 노드와 연결시켜서 원형으로 만든 리스트
  • 단순 연결리스트의 마지막 노드를 끝 노드와 연결 시켰다

예시

  • 리스트를 원형으로 만든 다음 리스트의 포인터가 마지막을 가리킨다. 그 후 리스트의 처음과 마지막에 노드를 삽입하는 경우를 살펴보자.

 

문제

void delete_first(list_ptr *ptr){
if ((*ptr)==NULL){ printf("원소 없음");} //빈리스트
else{
/* 원형리스트의 맨 앞 부분을 삭제하는 함수 */
//ptr의 링크 값을 바꿔야한다. 
(*ptr)->link=(*ptr)->link->link;

}
int length(list_ptr *ptr){
if ((*ptr)==NULL){ return 0;} //빈리스트
else{
int *i=(*ptr);
int count=0;
/* 원형리스트의 길이를 세는 함수 */. 
while(i!= null){
&i=(*i)->link;
count++
}
return count;
}}
/* DBLAB circularlist.c */
#include <stdio.h>
#include <malloc.h>

struct node {
        int data;
        struct node * link;
};
typedef struct node list_node;
typedef list_node * list_ptr;

list_ptr create(int n) {
   list_ptr first=NULL, temp=NULL;
   int i;
   for(i=0; i < n; i++)
   {     
     temp = (list_ptr)malloc(sizeof(list_node));  
     temp->data=(i+1); /* 리스트의 값 */  
     temp->link=first; /* 새로운 노드를 리스트의 맨 앞에 삽입한다. */  
     first = temp; 
   } 

   for(temp=first; temp->link; )
   {  temp=temp->link; }
   temp->link=first;  
   return temp; /* 마지막 노드 포인터 반환 */
} 

int add(list_ptr ptr) { 
        list_ptr last=ptr; int s=0;
        printf("The list contains: ");
		do
		{  ptr=ptr->link; s=s+ptr->data;
		   printf("%4d", ptr->data); }
        while(ptr!=last); 
        return s;  
} 
void print_list(list_ptr ptr) { 
        list_ptr last=ptr;
        printf("The list contains: ");
		do
		{  ptr=ptr->link;
		   printf("%4d", ptr->data); }
        while(ptr!=last); 
        printf("\\n");  
} 
   
int main()
{       
	list_ptr ptr = NULL;
        ptr = create(4); /* 4개의 노드를 가진 연결리스트를 만든다 */
        print_list(ptr);
		printf("\\naddition %d\\n", add(ptr));

}

'자료구조론' 카테고리의 다른 글

이진트리  (0) 2023.03.01
트리 자료구조  (0) 2023.03.01
연결 리스트  (0) 2023.03.01
5장 스택 응용  (1) 2023.03.01
스택과 큐  (0) 2022.10.02