list

rantri

New member
list

אני צריכה עזרה למימוש הפונ':insertion sort and selction
//********************************************* // List of integers //********************************************* #include <stdio.h> #include <stdlib.h> #include "ilist.h" // insert the new integer to the head of the list // return the new head INODE *il_insert(INODE *head, int new_val) { INODE *new_node = (INODE *)malloc(sizeof(INODE)); new_node->val = new_val; new_node->next = head; return new_node; } // append the new integer to the tail of the list // return the new head INODE *il_append(INODE *head, int new_val) { INODE *n = NULL; INODE *new_node = (INODE *)malloc(sizeof(INODE)); new_node->val = new_val; new_node->next = NULL; for ( n = head; n && n->next; n = n->next) ; if ( n ) { n->next = new_node; return head; } else return new_node; } // insert the new integer to the appropriated place of the list keeping it sorted // return the new head INODE *il_insert_sorted(INODE *head, int new_val) { INODE *n = NULL, *prev_n = NULL; INODE *new_node = (INODE *)malloc(sizeof(INODE)); new_node->val = new_val; new_node->next = NULL; for ( n = head; n; n = n->next) { if ( n->val >= new_val ) break; prev_n = n; } if ( prev_n ) { prev_n->next = new_node; new_node->next = n; return head; } else { new_node->next = head; return new_node; } } // remove integer from the list. // if first_only is false remove all nodes with this integer // otherwise remove first node only. // return the new head INODE *il_remove(INODE *head, int val, int first_only) { INODE *n = NULL, *next_n = NULL, *prev_n = NULL; for ( n = head; n; n = next_n) { next_n = n->next; if ( n->val == val ) // found - remove it { if ( prev_n ) prev_n->next = n->next; if ( n == head ) head = n->next; free(n); if ( first_only ) break; } else prev_n = n; } return head; } // return number of nodes with value == val int il_lookup(INODE *head, int val) { INODE *n = NULL; int num = 0; for ( n = head; n; n = n->next) if ( n->val == val ) num++; return num; } // return number of nodes int il_num_nodes(INODE *head) { INODE *n = NULL; int num = 0; for ( n = head; n; n = n->next) num++; return num; } // print list nodes void il_print(INODE *head) { INODE *n = NULL; for ( n = head; n ; n = n->next) printf("[%d] ", n->val); printf("\n"); } // remove whole list void il_remove_all( INODE *head ) { INODE *n = NULL, *next_n = NULL; for ( n = head; n; n = next_n) { next_n = n->next; free(n); } } /*answer by insertion sort ***********/ void insertion_sort(INODE **head) { INODE *ptr1 , *ptr2 , *ptr3, *end=*head; if(!(*head)) while (end->next !=NULL) { ptr1=end->next; if((ptr1->next) < (head->val)) { end->next=ptr1->next; ptr1->next=*head; *head=ptr1; } else { ptr3=*head; ptr2=ptr3->next; while(ptr1->val >ptr2->val) { ptr3=ptr2; ptr2=ptr3->next; } &nbsp​
 
למעלה