연결 목록은 동적 메모리 할당을 사용합니다. 즉, 그에 따라 확장 및 축소됩니다. 노드 모음으로 정의됩니다. 여기서 노드는 데이터와 링크의 두 부분으로 구성됩니다. 데이터, 링크 및 연결 목록의 표현은 다음과 같습니다. -
연결된 목록에 대한 작업
C 언어의 연결 목록에는 다음과 같은 세 가지 유형의 작업이 있습니다. -
- 삽입
- 삭제
- 횡단
삽입
노드 2와 노드 3 사이에 노드 5를 삽입하는 예를 고려하십시오.
이제 시작 부분에 노드 5를 삽입하십시오.
끝에 노드 5를 삽입하십시오.
끝에 노드 5를 삽입하십시오.
참고:
- 노드 이름이 지정되지 않았기 때문에 노드 5를 노드 2 앞에 삽입할 수 없습니다.
- 위치가 주어진 경우 노드 5를 2 앞에 삽입할 수 있습니다.
프로그램
다음은 연결 리스트에 요소를 삽입하는 C 프로그램입니다 -
#include <stdio.h> #include <stdlib.h> struct node{ int val; struct node *next; }; void print_list(struct node *head){ printf("H->"); while(head){ printf("%d->", head->val); head = head->next; } printf("……\n\n"); } void insert_front(struct node **head, int value){ struct node * new_node = NULL; new_node = (struct node *)malloc(sizeof(struct node)); if (new_node == NULL){ printf(" Out of memory"); } new_node->val = value; new_node->next = *head; *head = new_node; } void insert_end(struct node **head, int value){ struct node * new_node = NULL; struct node * last = NULL; new_node = (struct node *)malloc(sizeof(struct node)); if (new_node == NULL){ printf(" Out of memory"); } new_node->val = value; new_node->next = NULL; if( *head == NULL){ *head = new_node; return; } last = *head; while(last->next) last = last->next; last->next = new_node; } void insert_after(struct node *head, int value, int after){ struct node * new_node = NULL; struct node *tmp = head; while(tmp) { if(tmp->val == after) { /*found the node*/ new_node = (struct node *)malloc(sizeof(struct node)); if (new_node == NULL) { printf("Out of memory"); } new_node->val = value; new_node->next = tmp->next; tmp->next = new_node; return; } tmp = tmp->next; } } void insert_before(struct node **head, int value, int before){ struct node * new_node = NULL; struct node * tmp = *head; new_node = (struct node *)malloc(sizeof(struct node)); if (new_node == NULL){ printf("Out of memory"); return; } new_node->val = value; if((*head)->val == before){ new_node->next = *head; *head = new_node; return; } while(tmp && tmp->next) { if(tmp->next->val == before) { new_node->next = tmp->next; tmp->next = new_node; return; } tmp = tmp->next; } /*Before node not found*/ free(new_node); } void main(){ int count = 0, i, val, after, before; struct node * head = NULL; printf("Enter no: of elements: "); scanf("%d", &count); for (i = 0; i < count; i++){ printf("Enter %dth element: ", i); scanf("%d", &val); insert_front(&head, val); } printf("starting list: "); print_list(head); printf("enter front element: "); scanf("%d", &val); insert_front(&head, val); printf("items after insertion: "); print_list(head); printf("enter last element: "); scanf("%d", &val); insert_end(&head, val); printf("items after insertion: "); print_list(head); printf("Enter an ele to insert in the list: "); scanf("%d", &val); printf("Insert after: "); scanf("%d", &after); insert_after(head, val, after); printf("List after insertion: "); print_list(head); printf("Enter an ele to insert in the list: "); scanf("%d", &val); printf("Insert before: "); scanf("%d", &before); insert_before(&head, val, before); printf("List after insertion: "); print_list(head); }
출력
위의 프로그램을 실행하면 다음과 같은 결과가 나온다 -
Enter no: of elements: 4 Enter 0th element: 1 Enter 1th element: 2 Enter 2th element: 3 Enter 3th element: 4 starting list: H->4->3->2->1->...... enter front element: 5 items after insertion: H->5->4->3->2->1->...... enter last element: 0 items after insertion: H->5->4->3->2->1->0->...... Enter an ele to insert in the list: 6 Insert after: 0 List after insertion: H->5->4->3->2->1->0->6->...... Enter an ele to insert in the list: 7 Insert before: 5 List after insertion: H->7->5->4->3->2->1->0->6->......