ダディクールがC/C++の宿題を片づけます 32代目
■ このスレッドは過去ログ倉庫に格納されています
0863デフォルトの名無しさん
NGNG行数制限のために読みにくいのと(自分でどうにかしる)、再帰使いまくりだが。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct field_tag{char name[16];char age[4];struct field_tag *next;} field;
void search_and_insert(field *dest, const field *src){
field *temp;
if (dest->next == NULL){dest->next = (field*)malloc(sizeof(field));memcpy(dest->next, src, sizeof(field));}
else if (!(strcmp(dest->next->name, src->name) < 0)){temp = (field*)malloc(sizeof(field));memcpy(temp, src, sizeof(field));temp->next = dest->next;
dest->next = temp;}
else /* strcmp(dest->next->name, src->name) < 0 */search_and_insert(dest->next, src);
}
void free_all(field *ptr){if (ptr->next != NULL) free_all(ptr->next);free(ptr);}
int main(void){
field *root= (field*)malloc(sizeof(field)), *cur = root, temp;
memset(root, 0, sizeof(field));temp.next = NULL;
while(scanf("%s %s", temp.name, temp.age) != EOF){
search_and_insert(cur, &temp);
memset(&temp, 0, sizeof(field));
}
cur = root;
while (cur != NULL){
printf("%15s%4s\n", cur->name, cur->age);cur = cur->next;
}
if (root != NULL) free_all(root);
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています