Programming/Data Structure and Algorithm

윤성우의 열혈자료구조 문제 04 - 1연결리스트 익숙해지기

fishersheep 2021. 12. 25. 17:48
반응형

데이터 3 -> 2 -> 7 -> 8 ->5 를 입력하고 저장하면 역순인 5 -> 8 -> 7 -> 2 ->3 으로 저장되게 하는 예제

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

typedef struct _node {		//node 구조체 정의
	int data;
	struct _node* next;
}Node;

int main()
{
	Node* head = NULL;		//head 노드 선언
	Node* tail = NULL;		//tail 노드 선언
	Node * cur = NULL;		//cur 노드 선언, 저장된 데이터조회를 위한 변수

	Node* newNode = NULL;	//노드를 추가하기 위한 노드
	int readData;		//데이터를 저장하기 위한 변수

	while (1) {		//데이터를 입력하고 저장하는 while문
		printf("데이터입력: ");
		scanf("%d", &readData);

		if (readData < 1)		//데이터가 1보다작으면 반복문 종료
			break;

		newNode = (Node*)malloc(sizeof(Node));	//newNode 동적할당
		newNode->data = readData;		//scanf로 입력한 데이터를 newNode 데이터에 저장
		newNode->next = NULL;

		if (head == NULL) {		//head가 NULL일경우에
			head = newNode;		//newNode를 head와 tail이 가리키게 한다.
			tail = newNode;
		}
		else {		//head가 NULL이 아닌경우에 
			newNode->next = head;	//head를 newNode의 다음 노드로 가리키게한다.
			head = newNode;
		}
		
	}
	printf("\n");

	printf("입력받은데이터출력:");
	
	if (head == NULL)
		printf("입력된데이터가 없습니다.\n");
	else
	{
		cur = head;		//cur에 head를 대입
		printf("%d ", cur->data);	//cur의 데이터 출력

		while (cur->next != NULL) {	//cur의 다음노드가 NULL일때까지 데이터출력
			cur = cur->next;
			printf("%d ", cur->data);
		}
	}
	printf("\n");

	if (head == NULL)		//데이터삭제를 위한 조건문 시작
		return 0;
	else {
		Node* delNode = head;		//데이터삭제를 위한 노드
		Node* delNextNode = head->next;		

		printf("%d를 삭제합니다.\n", head->data);
		free(delNode);

		while (delNextNode != NULL) {		//다음노드가 NULL일때까지 데이터를 삭제
			delNode = delNextNode;
			delNextNode = delNextNode->next;

			printf("%d를 삭제합니다.\n", delNode->data);
			free(delNode);
		}
	}
	return 0;
}

반응형