Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 插入节点并按字母顺序排列_C_String_Pointers_Linked List_Singly Linked List - Fatal编程技术网

C 插入节点并按字母顺序排列

C 插入节点并按字母顺序排列,c,string,pointers,linked-list,singly-linked-list,C,String,Pointers,Linked List,Singly Linked List,我有一个歌曲库,用户将在其中输入歌曲,并将成为一个链接列表,但我的插入顺序列表不起作用 Node *insertIntoOrderedList(Node *head, char *songName, char *artist, char *genre) { if (head == NULL || songName < head -> songName) { return newNode(songName, artist, genre, head); // a new head

我有一个歌曲库,用户将在其中输入歌曲,并将成为一个链接列表,但我的插入顺序列表不起作用

Node *insertIntoOrderedList(Node *head, char *songName, char *artist, char *genre) {
if (head == NULL || songName < head -> songName) {
    return newNode(songName, artist, genre, head); // a new head of the list
}
Node *current = head;

while (current -> link != NULL && songName <= current -> link -> songName)
    current = current -> link;

current -> link = newNode(songName, artist, genre, current -> link);
return head;
Node*插入OrderedList(Node*头,char*歌曲名,char*艺术家,char*流派){
if(head==NULL | | songNamesongName){
return newNode(歌曲名、艺术家、流派、标题);//列表的新标题
}
节点*电流=头部;
while(当前->链接!=NULL&&songName链接->歌曲名)
当前=当前->链接;
当前->链接=新节点(歌曲名称、艺术家、流派、当前->链接);
回流头;
}


现在当我打印链表时,它将按照我输入它们的顺序,因此如果我输入B、A、C。当我打印链表时,它将是BAC而不是ABC

问题是您正在比较指针,而不是比较指针指向的字符串

例如,在这份声明中,我认为应该

if (head == NULL || strcmp( songName, head -> songName ) < 0 ) {
条件
songName链接->songName
错误。当
current->link->songName
小于或等于
songName
时,循环必须迭代

因此,它看起来应该是这样的

while (current -> link != NULL && strcmp( songName, current -> link -> songName ) >= 0 )
    current = current -> link;

当你说@SoundSync时,如果一个较小的字符串等于一个较大字符串的子字符串,而它小于较大字符串。@SoundSync每个字符串都以零字符结尾。零总是小于任何其他无符号字符。字符串作为无符号字符串进行比较。我正在测试我的函数,如果我连续输入4个字母,如a、b、c、d,它将打印出a、d、c、b。所以它似乎把一切都按相反的顺序推。如果我在后面输入一个“e”,它将是a,e,d,c,b,
while (current -> link != NULL && songName <= current -> link -> songName)
    current = current -> link;
while (current -> link != NULL && strcmp( songName, current -> link -> songName ) >= 0 )
    current = current -> link;