C언어 : 연결리스트2(예제)

지환·2022년 1월 31일
0

C언어

목록 보기
31/37
post-thumbnail

연결 리스트로 더하기 프로그램을 만들어보자.

<코드>

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

typedef struct node
{

	int number;
	struct node* p_next;

}NODE;

void Addnumber_fuction(NODE** pp_head, NODE** pp_tail, int number)
{
	if (NULL != *pp_head)
	{
		(*pp_tail)->p_next = (NODE*)malloc(sizeof(NODE));
		*pp_tail = (*pp_tail)->p_next;
	}
	else
	{
		*pp_head = (NODE*)malloc(sizeof(NODE));
		*pp_tail = *pp_head;
	}
	(*pp_tail)->number = number;
	(*pp_tail)->p_next = NULL;

}

void main()
{
	NODE* p_head = NULL, *p_tail = NULL, * p;
	int sum = 0, temp;
	while (1)
	{
		printf("숫자를 입력하세요(9999를 누르면 종료한다.) : \n");
		scanf_s("%d", &temp);
		if (9999 == temp) break;
		Addnumber_fuction(&p_head, &p_tail, temp);
	}

	p = p_head;//입력된 숫자를 출력하기 위해서 노드를 탐색할 포인터에 시작 노드의 주소 값을 대입한다.
	//p_head를 직접 사용하면 시작 노드의 위치를 잃어 버린다.
	while (NULL != p)
	{
		if (p != p_head) printf(" + "); // 숫자와 숫자 사이에 +를 출력한다.
		printf("%d", p->number); // 입력한 숫자를 출력한다.
		sum = sum + p->number; // 입력한 숫자들을 합산한다.
		p = p->p_next; // 다음 노드로 이동한다.
	}
	printf(" = %d\n", sum); //합산 값을 출력한다.

	while (NULL != p_head)
	{
		p = p_head;
		p_head = p_head->p_next; // 다음 노드로 이동시킨다.
		free(p);
	}
	p_tail = p_head;
}

<결과>

  • 다음은 파일 입출력에 대해서 알아보겠다.
profile
아는만큼보인다.

0개의 댓글