/*
 * Callback.c - 연결 목록 콜백 구현
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct NODE {
 struct NODE *link;
 int data;
}Node;
Node **create_sll(const int);
void insert_data(Node **);
void show_list(Node **);
void sort_list(Node **);
int compare_ints(void const *, void const *); /* 프로토타입 함수 */
Node *search_list(Node *, void const *, int(void const *, void const *)); /* 프로토타입 */
int main(void){
 int (*compare)(void const *, void const *) = compare_ints;
 int value, val2find;
 int nodes; /* 노트 카운트 */
 Node **rootp; /* 루투 위치 */
 Node *desired_node;
 
 puts("\n**Program creates Singly Linked List**");
 puts("**And allows users to perform various operations on the"
   "list**\n");
 puts("User, specify number of nodes in the list, in range 1"
   " through some positive no.");
 scanf("%d", &nodes);
 rootp = create_sll(nodes);
 printf("Les's insert %d integers in the list...\n", nodes);
 insert_data(rootp);
 puts("**Les's show up the list**");
 show_list(rootp);
 puts("Let's sort the list, in ascending order...");
 sort_list(rootp);
 puts("Let's show up the list**");
 show_list(rootp);
 puts("**Let's use Callback() function**");
 printf("User, enter an integer you want to see into the "
   "Singly Linked List...\n");
 scanf("%d", &val2find);
 /* 콜밸 함수 호출 */
 desired_node = search_list(*rootp, &val2find, compare);
 if(desired_node != NULL)
  puts("Desired value is found.");
 else
  puts("Desired value NOT found.");
 return 0;
}
Node *search_list(Node *node, void const *value, int compare(void const *, void const *)){
 while(node != NULL){
  if(compare(&node->data, value) == 0)
   break;
  node = node->link;
 }
 return node;
}
int compare_ints(void const *p2nv, void const *p2v){
 if(*(int *)p2nv == *(int *)p2v)
  return 0;
 else
  return 1;
}
Node **create_sll(const int nodes){
 int i;
 Node *current;
 static Node *root;
 Node **rootp = &root;
 root = (Node *)malloc(nodes * sizeof(Node));
 if(root == NULL){
  puts("Error: Not Enough Memory!");
  exit(1);
 } else {
  current = root;
  for(i = 1; i <= nodes; i++){
   if(i == nodes) {
    current->link = NULL;
   } else {
    current->link = current + 1;
    current++;
   }
  }
  printf("List with %d nodes created successfully!\n", nodes);
  puts("");
 }
 return rootp;
}
void insert_data(Node **linkp){
 Node *next = *linkp;
 Node *current;
 do {
  current = next;
  scanf("%d", &(current->data));
  next = current->link;
 }while(current->link != NULL);
 puts("");
}
void show_list(Node **linkp){
 Node *next = *linkp;
 Node *current;
 do{
  current = next;
  printf("%d", current->data);
  next = current->link;
 }while(current->link != NULL);
 puts("\n");
}
void sort_list(Node **linkp){
 int temp;
 Node *current = *linkp;
 Node *next = current->link;
 while(current->link != NULL){
  while(next != NULL){
   if(current->data > next->data){
    temp = next->data;
    next->data = current->data;
    current->data = temp;
   }
   next = next->link;
  }
  current = current->link;
  next = current->link;
 }
}
/*
 * ./callback
**Program creates Singly Linked List**
**And allows users to perform various operations on thelist**
User, specify number of nodes in the list, in range 1 through some positive no.
5
List with 5 nodes created successfully!
Les's insert 5 integers in the list...
32
53
1
08
0556
**Les's show up the list**
325318556
Let's sort the list, in ascending order...
Let's show up the list**
183253556
**Let's use Callback() function**
User, enter an integer you want to see into the Singly Linked List...
53
Desired value is found */
댓글 없음:
댓글 쓰기