๋ฐ˜๊ฐ€์›Œ์š”! ํ—ˆ๋ธŒ์ž…๋‹ˆ๋‹ค!

์ €๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ํ˜„๋Œ€ ์—ฐ๊ธˆ์ˆ ์‚ฌ๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋Š๋‚€ ์ ๋“ค๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ

[C์–ธ์–ด] ๋‹จ์–ด๋“ค์„ ์ €์žฅํ•˜๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

mmin.h 2020. 11. 6. 14:53

 

์•ˆ๋…•ํ•˜์„ธ์š” ์ฃผ์ธ์žฅ H ์ž…๋‹ˆ๋‹ค. 

์ด๋ฒˆ ๊ธ€์„ ์„ค๋ช…๋“œ๋ฆฌ๊ธฐ ์ „์— ๋จผ์ € ์ €์˜ ํฌ์ŠคํŠธ๋ฅผ ์ฝ๊ณ ์™€์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

modernalchemist.tistory.com/39

 

[C์–ธ์–ด] ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (linked list)

linked representation ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ณ  ์‚ญ์ œ๋‚˜ ์‚ฝ์ž… ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์—ฐ๊ฒฐ๋œ ํ‘œํ˜„ ์ด ์—ฐ๊ฒฐ๋œ ํ‘œํ˜„์€ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋“ค์„ ์—ฐ๊ฒฐ. ์ด๋Š” ํŠธ๋ฆฌ ๊ทธ๋ž˜ํ”„ ์Šคํƒ ํ ๋“ฑ

modernalchemist.tistory.com

๋‹จ์–ด๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ฝ”๋“œ๋Š” ์‰ฌ์šด๋ฐ์š”. 

๊ธฐ์กด์— ์งฐ๋˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ฝ”๋“œ์—์„œ 

typedef int element๋ฅผ ๋ฐฐ์—ด์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ฒด๋กœ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

typedef struct{
	char name[100]; //๋‹จ์–ด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด 
} element;

๊ทธ๋ฆฌ๊ณ  print_list() ๋ฉ”์†Œ๋“œ๋„ ๋ฐ์ดํ„ฐ ํ•„๋“œ์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋„๋ก ์ˆ˜์ •ํ•ด๋ด…์‹œ๋‹ค. 

void print_list(ListNode* head) {
	for (ListNode* p = head; p != NULL; p = p->link) {
		printf("%s ->", p->data.name); //element๊ฐ€ ๊ตฌ์กฐ์ฒด ์ด๊ธฐ ๋•Œ๋ฌธ
	}
		printf("NULL \n");
}

๊ทธ๋Ÿฌ๋ฉด ์ตœ์ข…์ ์œผ๋กœ ์ˆ˜์ •๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ์ง€์š”. 

์—ฌ๊ธฐ์„œ insert๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋„ ์ž‘์„ฑํ•ด๋ณผ ์ˆ˜ ์žˆ์„ํ…๋ฐ ์ €๋„ ํ•œ๋ฒˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•ด๋ด์•ผ ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

#include <stdio.h>
#include <stdlib.h>

typedef struct {
	char name[100];
}element;

typedef struct ListNode {
	element data;
	struct ListNode* link;
} ListNode;

ListNode* insert_first(ListNode* head, element value) {
	ListNode* p = (ListNode*)malloc(sizeof(ListNode));
	
	p->data = value; 
	p->link = head; 
	head = p; 
	return head; 
}
ListNode* insert(ListNode* head, ListNode* pre, element value) {
	ListNode* p = (ListNode*)malloc(sizeof(ListNode));
	p->data = value; 
	p->link = pre->link; 
	pre->link = p; 
	return head; 
}
ListNode* delete_first(ListNode* head) {
	ListNode* removed; 
	if (head == NULL) return NULL;
	removed = head; 
	head = removed->link;
	free(removed);
	return head; 
}

ListNode* delete_pre(ListNode* head, ListNode* pre) {
	ListNode* removed; 
	removed = pre->link; 
	pre->link = removed->link;
	free(removed); 
	return head; 
}
void print_list(ListNode* head) {
	for (ListNode* p = head; p != NULL; p = p->link) {
		printf("%s -> ", p->data.name);
	}
		printf("NULL\n");
}


int main(void) {
	ListNode* head = NULL; //linked list๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” head pointer
	element data;

	strcpy(data.name, "C lang");
	head = insert_first(head, data);
	print_list(head);

	strcpy(data.name, "Love");
	head = insert_first(head, data);
	print_list(head);

	strcpy(data.name, "I");
	head = insert_first(head, data);
	print_list(head);

	return 0; 
}