10개의 임의의 정수를 단순 연결리스트의 리스트에 담고 최솟값과 최댓값을 찾는 간단한 문제입니다.
최솟값과 최댓값을 찾는 pivot(시작 비교 할 값)을 리스트의 첫번째 원소로 지정하여 리스트를 탐색하여 값을 반환합니다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #pragma warning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ListNode { // 노드 타입 int data; struct ListNode* link; } ListNode; // 오류 처리 함수 void error(char* message) { fprintf(stderr, "%s\n", message); exit(1); } void insert_last(ListNode** head, int value) { ListNode* p = (ListNode*)malloc(sizeof(ListNode)); if (p == NULL)return; p->data = value; p->link = NULL; if (*head == NULL) *head = p; else { ListNode* temp = *head; while (temp->link != NULL) temp = temp->link; temp->link = p; } } int check_minval(ListNode*head) { ListNode* temp = head; int min_val = temp->data; for (temp; temp != NULL; temp = temp->link) if (min_val > temp->data) min_val = temp->data; return min_val; } int check_maxval(ListNode*head) { ListNode* temp = head; int max_val = temp->data; for (temp; temp != NULL; temp = temp->link) if (max_val < temp->data) max_val = temp->data; return max_val; } // 테스트 프로그램 int main(void) { ListNode* head = NULL; int data; int max_val, min_val; //10개의 숫자를 넣기 for (int i = 0; i < 10; i++) { scanf("%d", &data); insert_last(&head, data); } min_val = check_minval(head); max_val = check_maxval(head); printf("최솟값은 %d, 최댓값은 %d입니다.\n", min_val, max_val); return 0; } | cs |
결과
'자료구조 > 리스트' 카테고리의 다른 글
헤드노드를 이용하지않는 이중연결리스트의 구현 (0) | 2020.05.16 |
---|---|
헤드노드를 이용한 이중연결리스트의 구현 (0) | 2020.05.16 |
원형연결리스트 삽입 구현하기(맨앞,중간,맨뒤) (0) | 2020.04.29 |
학생정보를 담은 단순연결리스트 구현하기 (0) | 2020.04.22 |