使用qsort按字母顺序排列队列

时间:2014-05-13 20:07:31

标签: c queue qsort alphabetized

我正在尝试使用qsort按字母顺序排列队列(链表),但是当我运行它时,我遇到了分段错误。我相信问题出在比较函数中,但我没有看到调试它的方法,所以我在这里。

int compare (const void*va, const void*vb)
{
    link a=(link)va;
    link b=(link)vb;
    int criterium_1 = strcmp(a->item->text,b->item->text);
    if (criterium_1!=0) return criterium_1;
    return (a->item->sender)-(b->item->sender);
}


int list ( Queue list, int sort )
{
    Queue q = list ;
    link t;
    int i=0;
    link *sorted = (link*) malloc ( sizeof(link) * list->size );

    if ( list == NULL )
    {
        puts("NULL");
        return 0;
    }

    for ( t = q->head ; t!=NULL ; t=t->next )
    {
        sorted[i]=t;
        i++;
    }

    if( sort==1 )
    qsort( sorted , q->size , sizeof(link), compare );

    for ( i=0 ; i<q->size ; i++ )
    {
        printf("%d %d %s", sorted[i]->item->receiver, sorted[i]->item->sender, sorted[i]->item->text ) ;
    }

    free(sorted);       /* Esta a libertar o que esta la dentro tambem? */

    return 0;
}

0 个答案:

没有答案