Data Structure- List by Node (c)

자료구조 – 노드(연결 리스트)로 구현된 리스트 c언어 소스

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

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


ListNode* insert_first(ListNode *head, element value) {
	ListNode *p;
	p = (ListNode*)malloc(sizeof(ListNode));
	p->data = value;
	p->link = head;
	head = p;
	return head;
}

// pre: 삽입할 노드의 이전 노드 
ListNode* insert(ListNode *head, ListNode* pre, element value) {
	ListNode *p;
	p = (ListNode*)malloc(sizeof(ListNode));
	p->data = value;
	p->link = pre->link;
	pre->link = p;
	return head;
}

ListNode* insert_last(ListNode *head, element value) {
	ListNode *p;
	p = head;
	while (p->link != NULL) {
		p = p->link;
	}
	p->link = (ListNode*)malloc(sizeof(ListNode));
	p->link->data = value;
	p->link->link = NULL;
	return head;
}


ListNode* delete_first(ListNode *head) {
	ListNode *p = NULL;
	if (head != NULL) {
		p = head;
		head = p->link;
	}
	free(p);
	return head;
}

// pre: 삭제할 노드의 이전 노드 
ListNode* delete(ListNode *head, ListNode *pre) {
	ListNode *p;
	p = pre->link;
	pre->link = p->link;
	free(p);
	return head;
}

ListNode* delete_last(ListNode *head) {
	ListNode *p;
	p = head;
	if (p->link == NULL) {
		free(p);
		head = NULL;
	}
	else {
		// 마지막에서 두 번째 노드의 link필드를 null로 만들기 
		while (p->link->link != NULL) {
			p = p->link;
		}
		free(p->link);
		p->link = NULL;
	}
	return head;
}

void print_list(ListNode* head) {
	ListNode *p = NULL;
	p = head;
	int i = 0;
	while (p != NULL) {
		printf("%d ", p->data);
		p = p->link;
		i++;
	}
	printf("(size:%d)\n", i);
}

int main() {
	ListNode* list = NULL;

	printf("삽입:");
	list=insert_first(list,10); // 10
	list = insert_first(list, 11); // 11 10
	list = insert(list, list->link, 12); // 11 10 12 
	list = insert_last(list, 13); // 11 10 12 13
	list = insert_last(list, 14); // 11 10 12 13 14
	print_list(list);

	printf("\n삭제:");
	list = delete_first(list); // 10 12 13 14
	list = delete_last(list); // 10 12 13
	list = delete(list, list->link); // 10 12  
	print_list(list);
}

Leave a Reply

Your email address will not be published. Required fields are marked *