我有一个程序来计算文本文件中单词的频率。节点包含三个关键变量(frequencyint)、wordchar[])和next*Node
添加新单词并将频率设置为1
如果存在单词,则增加频率。
排序函数是气泡排序
我在NetBeans&OS X终端上创建并运行了这个程序,程序运行得很完美,没有任何问题。给我正确的输出。
有人能告诉我出了什么事吗?
在Linux/Mac gcc-o文件fileName.c上编译
Entire Code
分类功能

void swap(struct Node *a, struct Node *b)
{
    int temp = a->frequency;
    a->frequency = b->frequency;
    b->frequency = temp;

    char tempS[50];
    strcpy(tempS, a->word);
    strcpy(a->word,b->word);
    strcpy(b->word,tempS);
}

void sortList(struct Node *start)
{
    int swapped;
    struct Node *ptr1;
    struct Node *lptr = NULL;

    if (ptr1 == NULL)
    {
        return;
    }
    do
    {
        swapped = 0;
        ptr1 = start;

        while (ptr1->next != lptr)
        {
            if (ptr1->frequency < ptr1->next->frequency)
            {
                swap(ptr1, ptr1->next);
                swapped = 1;
            }
            ptr1 = ptr1->next;
        }
        lptr = ptr1;
    }
    while (swapped);
}

最佳答案

在bubble排序的每次过程中,您需要对照下一个节点检查每个节点,并根据需要进行交换。由于一次查看两个节点,在ptr1ptr1->next中,需要在ptr1->next为空时结束循环(没有下一个节点)。为此,您可以将循环条件从while (ptr1->next != lptr)更改为仅while (ptr1->next),并完全消除lptr
在代码中,您将ptr1->nextlptr进行比较,而不是NULL。因为lptrNULL开头,所以您的第一次传递是正确的——但是在每次传递的末尾,它被设置为指向最后一个节点,这意味着第一次传递之后的每个循环都提前终止了一个节点,最后两个节点即使需要进行正确的排序也不会被交换。

关于c - C:故障?:排序功能在LINUX(RHEL 6.6)上不起作用,但在MAC OS X(10.3)上起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31365219/

10-10 06:21