본문 바로가기

C/자료구조

문과생이 이해한 단일 연결리스트(이중 포인터 사용)

728x90
#include<stdio.h>

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

node* insert_first(node** head, int x) {
	node* p = (node*)malloc(sizeof(node));
	p->data = x;
	p->link = head;      
	head= p;
}

int main() {
	node* head = NULL;
	
	//데이터 삽입 및 출력
	for (int i = 0; i < 5; i++) {
		head = insert_first(&head,i);  //반환된 head 포인터를 저장. 아니면 null값만 출력됨
		print_node(&head);
	}
	return 0;
}

 이중 포인터는 포인터의 포인터를 저장한다. 그래서 head값을 굳이 return하지 않아도 깔끔하게 처리 가능. 

 

 처음에 이중 포인터 개념이 낯설어서 좀 헤맸는데 그림으로 보니 쉽게 이해가 가능햇다. call-by-reference 개념같은데, python에서 리스트와 함수 배울 때, 정수와 다르게 리스트는 주소값이 들어있어서 함수에서 값을 수정하고 return하지 않아도 수정된 리스트를 얻을 수 있다는 것. 

 

 그리고 진짜 tmi인데, 이번학기 수강 과목인 database 교수님이 수정과 업데이트는 다른 개념이라고 하셨다. 

 

updata= add+delete+modify

 

 값을 업데이트한다는 건 값을 추가하거나 삭제하고 기존의 값을 수정한다는 의미를 모두 내포하고 잇다고.. 이래서 원서 공부가 중요하다고 하셨다.