쓰는중 자료구조 구현 - C를 통한 연결리스트의 구현

조해빈·2023년 4월 3일
0

C

목록 보기
5/7

구현한 코드

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

typedef int element;

// 노드 타입을 구조체로 정의한다.
typedef struct _ListNode { 
  element data;
  struct _ListNode *link;
} ListNode;

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

ListNode *insert(ListNode *head, ListNode *pre, element value) // 노드 pre 뒤에 새로운 노드 삽입
{
	ListNode *p = (ListNode*)malloc(sizeof(ListNode));
	p->link = pre->link;
	p->data = value;
	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(ListNode *head, ListNode *pre) // pre가 가리키는 노드의 다음 노드를 삭제.
{
	ListNode *removed;
	removed = pre->link;
	pre->link = removed->link;
	free(removed);
	return head;
}

ListNode *search(ListNode *head, element x)
{
	ListNode *p = head;
	while (p!=NULL) {
		if (p->link==x) {
			return p;
		}
		p = p->link;
	}
	return NULL; //fail
}

void print(ListNode *head)
{
	for (ListNode *p = head; p != NULL; p = p->link) {
		printf("%d - ", p->data);
	}
	printf("NULL \n");
}

// 메인
int main(void)
{
	ListNode *head = NULL;

	head = insert_first(head, 10);
	print_list(head);
	head = insert_first(head, 20);
	print_list(head);
	head = insert_first(head, 30);
	print_list(head);

	if (search_list(head, 30)!=NULL)
		printf("리스트에서 30을 찾았습니다. \n");
	else
		printf("리스트에 30가 없습니다. \n");

	return 0;
}
profile
UE5 공부하는 블로그로 거처를 옮겼습니다!

0개의 댓글