#include <stdio.h>
#include <stdlib.h>
struct Node_{
int data;
struct Node_* ptr;
}
typedef struct Node_ Node; //struct Node_를 Node라고 쓰겠다.
Node* head; //전역변수 선언
int main(){
head = NULL;
scanf("%d", &x); //x 입력받기
insert(x);
}
Insert 함수는 다음과 같다.
void Insert(int x){
Node* tmp = (Node*)malloc(sizeof(Node));
tmp -> data = x;
tmp -> ptr = head;
head = tmp;
}
main을 따라가며, insert함수를 확인해본다.
먼저 main을 보자.
//main
head = NULL;
//x로 5를 입력한다고 가정
insert(5);
head에 null을 할당하며 아래와 같은 모습이 된다.
이제 Insert함수를 자세히 살펴보자.
void insert(int x){
Node* tmp = (Node*)malloc(sizeof(Node));
tmp -> data = x;
tmp -> ptr = head;
head = tmp;
}
새로운 메모리(200번지)를 할당받고 tmp가 그를 가리킨다.
tmp가 가리키는 200번지의 data에 x를 할당, ptr에 head를 할당하며 tmp가 head를 가리킨다. (즉, head가 가리키는 null을 가리키게 됨)
head에 tmp를 할당하며, head가 200번지를 가리킨다.
함수를 빠져나가고 stack의 tmp가 날라가며 이와 같은 형태가 된다.
insert를 여러번 더 해보자.
insert(x) 3회 호출해본다.
x의 입력 순서는 다음과 같다. [1, 2, 3]
int main(){
head = NULL;
int x, i;
for(i = 0; i< 3; i++){ //3회 insert
scanf("%d", &x);
insert(x);
}
}
void insert(int x){
Node* tmp = (Node*)malloc(sizeof(Node));
tmp -> data = x;
tmp -> ptr = head;
head = tmp;
}
ver 1 최종
- 1, 2, 3의 순서로 데이터를 입력함
- 입력된 데이터는 linked list의 시작 부분에 들어감
- 따라서 head -> 3 -> 2-> 1 -> null의 순서로 이루어짐
#include <stdio.h>
#include <stdlib.h>
struct Node_{
int data;
struct Node_* ptr;
}
typedef struct Node_ Node; //struct Node_를 Node라고 쓰겠다.
int main(){
Node* head = NULL; //main에 선언
head = Insert(head, 2);
head = Insert(head, 4);
head = Insert(head, 6);
}
Insert함수는 다음과 같다.
Node* Insert(Node* head, int x){
Node* tmp = (Node*)malloc(sizeof(Node));
tmp -> data = x;
tmp -> ptr = NULL;
if(head != NULL){
tmp -> ptr = head;
}
head = tmp;
return head;
}
#include <stdio.h>
#include <stdlib.h>
struct Node{
int data;
struct Node_* ptr;
}
typedef struct Node_ Node;
int main(){
Node* head = NULL;
Insert(&head, 2);
Insert(&head, 4);
Insert(&head, 6);
}
Insert함수는 다음과 같다.
Node* Insert(Node** phead, int x){
Node* tmp = (Node*)malloc(sizeof(Node));
tmp -> data = x;
tmp -> ptr = NULL;
if((*phead) !== NULL){
tmp -> ptr = *phead;
*phead = tmp;
}
head = tmp;
}