Please help! C89 Function - How to modify append_to_list to insert players in an
ID: 3765701 • Letter: P
Question
Please help!
C89 Function - How to modify append_to_list to insert players in an ordered list( by last and first name) and the list will remain ordered after insertion? Ex: "John Smith" would be after "Bob Smith" but before "George Washington" in the list. Thanks for any help provided.
Here's the struct for player:
struct player{
int number;
char first_name[NAME_LEN+1];
char last_name[NAME_LEN+1];
struct player *next;
};
here's the struct for append_to_list:
struct player *append_to_list(struct player *roster){
struct player *cur, *new_node;
new_node = malloc(sizeof(struct player));
if (new_node == NULL) {
printf("Database is full; can't add more players. Try deleting some first ");
return roster;
}
printf("Enter player number: ");
scanf("%d", &new_node->number);
for (cur = roster;cur != NULL;cur = cur->next)
if (cur != NULL && new_node->number == cur->number) {
printf("Player already exists. ");
free(new_node);
return roster;
}
printf("Enter player last name: ");
read_line(new_node->last_name, NAME_LEN);
printf("Enter player first name: ");
read_line(new_node->first_name, NAME_LEN);
if(roster == NULL){
roster = new_node;
return roster;
}else{
for(cur = roster; cur->next!= NULL; cur = cur->next);
cur->next = new_node;
new_node->next = NULL;
return roster;
}
}
Explanation / Answer
// I changed your code. Please give the rest of the code so I can fix my code if there are any errors
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NAME_LEN 20
struct player{
int number;
char first_name[NAME_LEN+1];
char last_name[NAME_LEN+1];
struct player *next;
};
struct player *append_to_list(struct player *roster){
struct player *cur, *new_node;
new_node = malloc(sizeof(struct player));
if (new_node == NULL) {
printf("Database is full; can't add more players. Try deleting some first ");
return roster;
}
printf("Enter player number: ");
scanf("%d", &new_node->number);
printf("Enter player last name: ");
read_line(new_node->last_name, NAME_LEN);
printf("Enter player first name: ");
read_line(new_node->first_name, NAME_LEN);
for (cur = roster; cur != NULL | strcmp(cur->last_name, new_node) < 0; cur = cur->next)
if (cur != NULL && new_node->number == cur->number) {
printf("Player already exists. ");
free(new_node);
return roster;
}
if(roster == NULL){
roster = new_node;
return roster;
}else{
for(cur = roster; cur->next!= NULL; cur = cur->next);
cur->next = new_node;
new_node->next = NULL;
return roster;
}
}
int main(){
}