// BATORDER.CPP // Example of a circularly-linked list. // include files #include #include #include // global structure, variables, and constants const NAME_LENGTH = 20; struct batter_node // node for linked list { char batter_name[NAME_LENGTH]; batter_node *next; // link to next node }; batter_node *first; batter_node *current_batter; // pointer to current batter // function prototypes int get_batter_name(char name[NAME_LENGTH]); void add_node(char name[NAME_LENGTH]); void do_rotation(); void delete_list(); // beginning of main function int main() { char name[NAME_LENGTH]; if(get_batter_name(name)) // prompt user for data for the node { first = new batter_node; // initialize list head strcpy(first->batter_name, name); first->next = first; // initialize next node pointer to first current_batter = first; while(get_batter_name(name)) { add_node(name); } do_rotation(); // display the counties and populations delete_list(); // free the memory used by the linked list } return 0; } // Function that gets data from user. int get_batter_name(char name[NAME_LENGTH]) { int keep_data = 1; cout << "\nEnter batter name (Press Enter alone to stop): "; cin.get(name,NAME_LENGTH); cin.ignore(80,'\n'); if(name[0] == 0) { keep_data = 0; } return(keep_data); } // Function that adds a node to the end of the linked list. void add_node(char name[NAME_LENGTH]) { batter_node *new_rec_ptr; // Declare temporary pointer for the new node. new_rec_ptr = new batter_node; // Allocate memory for a new node and // initialize pointer to point to it. strcpy(new_rec_ptr->batter_name, name); new_rec_ptr->next = first; // Set next node pointer of new node to first current_batter->next = new_rec_ptr; // Place new node in list current_batter = new_rec_ptr; } // Function that displays entire linked list. void do_rotation() { char user_input[3]; current_batter = first; // Move current_batter to first do { cout << "\nThe next batter is " << current_batter->batter_name << ".\n"; cout << "\nPress Enter for next batter or Q and Enter to quit: "; cin.get(user_input,3); cin.ignore(80,'\n'); current_batter = current_batter->next; } while((user_input[0] != 'Q') && (user_input[0] != 'q')); } // Function that frees the memory used by the linked list. void delete_list() { batter_node *temp_ptr; // pointer used for temporary storage current_batter = first; // Move current_ptr to head of the list. do // Traverse list until the end is reached. { temp_ptr = current_batter->next; // Set temporary pointer to point // to the remainder of the list. delete current_batter; // Delete current current_batter = temp_ptr; } while(temp_ptr != first); }