C语言 我将如何冒泡排序的名字链表



我需要帮助创建一个对名称链表进行冒泡排序的函数。提前感谢您的帮助。

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define MAX_STR_LEN 25
typedef struct Data_ {
    char *name;
    struct Data_ *next;
}Data;
Data* bubble_sort(Data *list);
Data* read_from_file(const char* file, const int size);
void display(Data *list);
void push(Data **head, char *name);
int main(int argc, char **argv){
    if(argc != 2){
            printf("Not enough parameters!");
            exit(0);
    }
    Data *head = NULL;
    int size = 10;
    head = read_from_file(argv[1], size);
    printf("nBubble Sortn");
    head = bubble_sort(head);
    display(head);
}
Data *bubble_sort(Data *list){

}
void push(Data **head, char *name){
    Data *temp = malloc(sizeof(Data*));
    temp->name = name;
    temp->next = *head;
    *head = temp;
}
Data* read_from_file(const char* file, const int size){
    FILE *input;
    input = fopen(file, "r");
    Data *new_ = (Data*)malloc(sizeof(Data*));
    new_->next = NULL;
    int i;
    char name[MAX_STR_LEN];
    for(i = 0; i < size; i++){
    fscanf(input, "%25s", &name);
    push(&new_, name);
    }
return new_;
}
void display(Data *list){
    Data *current = list;
    while(current){
            printf("n%s", current->name);
            current = current->next;
    }
}

我要读取的文件名文件名为names。txt,它看起来像这样:

德里克

德鲁

Randell

特雷

卡门科林

艾迪

Pablo

拉蒙特

德克斯特

提前感谢您的帮助

您需要为所有这些名称保留空间,您可以使用strdup():

void push(Data **head, char *name){
    Data *temp = malloc(sizeof(Data*));
    temp->name = strdup(name); /* here */
    temp->next = *head;
    *head = temp;
}

mallocstrcpy:

void push(Data **head, char *name){
     Data *temp = malloc(sizeof(Data*));
     temp->name = malloc(strlen(name) + 1);
     strcpy(temp->name, name);
     temp->next = *head;
     *head = temp;
}

别忘了最后加free

还要注意,你传递给malloc的大小是错误的:

Data *temp = malloc(sizeof(Data*));
必须

Data *temp = malloc(sizeof(Data));

Data *temp = malloc(sizeof(*temp));

如果您使用的是unix,那么valgrind和gdb是检测此类问题的优秀工具。

相关内容

  • 没有找到相关文章

最新更新