728x90

 

코딩도장

#include <stdio.h>
#include <stdlib.h>
/*
2020-11-27 node add
*/
struct NODE{
	struct NODE *next;
	int data;
};

void insert_node(struct NODE *target, int data){	//기준노드뒤에  노드를 추가하는 함수 
	struct NODE *newNode = (struct NODE*)malloc(sizeof(struct NODE)); //새 노드생성 
	newNode->next = target->next; //새 노드의 다음노드에 기준노드의 다음노드ㅇ를 지정 
	newNode -> data = data; 
	target->next = newNode; //기준노드의 다음노드에 새 노드를 지정 
}

int		main(){
	struct NODE *head = (struct NODE*)malloc(sizeof(struct NODE));
	 
	head->next = NULL;
	
	insert_node(head,11);
	insert_node(head,22);
	insert_node(head,33); 
	
	struct NODE *curr = head->next;
	
	while(curr != NULL){
		printf("%d\n",curr->data);
		curr= curr->next;
	}
	
	curr = head->next;      // 연결 리스트 순회용 포인터에 첫 번째 노드의 주소 저장
    while (curr != NULL)    // 포인터가 NULL이 아닐 때 계속 반복
    {
        struct NODE *next = curr->next;    // 현재 노드의 다음 노드 주소를 임시로 저장
        free(curr);                        // 현재 노드 메모리 해제
        curr = next;                       // 포인터에 다음 노드의 주소 저장
    }
    
    free(head);
    
    return (0);
}

 

리스트 구조를 구현하는데에 가장 기본적인 방법인 자료구조입니다.

 

리스트를 구성하고 있는 가장 기본적인 단위인 노드(Node) 의 구조입니다. 

 

 데이터

다음노드 포인터

                                         <노드의 구조>

 

각각의 노드를 연결해주면 연결리스트(링크드리스트) 가 됩니다.

 

 

<다른 예제코드>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

노드의 구조체

typedef struct ListNode

{

int data; //데이터값

struct ListNode* NextNode; // 다음노드의 주소

} Node;

 

새로운 노드생성

Node* CreateNode(int newData)

{

Node* NewNode = (Node*)malloc(sizeof(Node)); //새로운 노드를 생성합니다.

NewNode->data = newData; //데이터저장

NewNode->NextNode = null; // 다음노드에 null로 초기화

 

return NewNode; //노드의 주소를 반환합니다.

}

 

연결리스트에 노드추가(새로만든노드를 연결리스트 맨마지막에 붙이는함수)

void AppendNode(Node** Head, Node* NewNode)

{

if((*Head) ==NULL)

{

*Head = NewNode;  //헤드노드가 null = 리스트가 없다 --> 새로만든 노드를 헤드노드로 지정한다.

}

else

{

Node* Tail = (*Head);  //헤드가 현재 테일이다.

while(Tail->NextNode != null) // 현재의 다음노드가 있으면

{

Tail = Tail->NextNode;  //현재의 다음노드가 테일이 된다.

}

 

Tail->NextNode = NewNode; // 다음노드에 새로만든 노드를 추가한다.

}

}

 

노드 삽입

 

void InsertNode(Node* current , Node* NewNode)

{

NewNode->NextNode = current ->NextNode;

current->NextNode = NewNode;

}

 

 

 

728x90

+ Recent posts