问题使用C中的双链接列表



开始我正在尝试从一个文件中读取列表,然后将其写入另一个文件并在输出中显示。问题是,我认为reading函数有效,但当我试图调用displayData函数时,我总是得到一个无限循环。我是这一章的初学者,所以我不明白为什么会一直发生这种情况。这是我的两个功能:

void readData() {
    FILE* f;
    f=fopen("data.in","r");
    first = last = NULL;
    while (!feof(f)) {
        p = (NodeT *)malloc(sizeof(NodeT));
        fscanf(f,"%d",&p->key);
        if (first == NULL) { /* empty list */
            first = last = p;
            p->next = p->prev = NULL;
        }
        else { /*nonempty list */
            last->next = p;
            p->prev = last;
            last = p;
        }
    }
    fclose(f);
}
void displayData() {
    FILE* f;
    f=fopen("data.out","w");
    for (p = first; p!= NULL; p = p->next) {
        printf("%d ",p->key);
        fprintf(f,"%d ",p->key);
    }
    fclose(f);
}

另外,需要注意的是,我的数据.in是:1 2 3 4 5 6 7 8 9 10。还有我的结构:

typedef struct node_type {
    int key;
    struct node_type *next, *prev;
}NodeT;
NodeT *p, *first, *last;

任何帮助都将不胜感激。非常感谢!

    else { /*nonempty list */
        last->next = p;
        p->prev = last;
        last = p;
    }

您没有在非空列表情况下初始化p->next。它应该为NULL,因为当您推到最后时没有下一个元素。

    else { /*nonempty list */
        last->next = p;
        p->prev = last;
        p->next = NULL;
        last = p;
    }

相关内容

  • 没有找到相关文章

最新更新