gpt4 book ai didi

c - 按字母顺序插入双链表问题

转载 作者:行者123 更新时间:2023-11-30 19:40:44 25 4
gpt4 key购买 nike

因此,我正在读取文件并将国家公园名称插入双链表中的节点中。现在,我想按字母顺序插入,我以为我是在插入函数中这样做的,但是当我去打印列表时,它只是按照它们插入的顺序。我的猜测是我有一个插入函数中的 strcmp 出错,但我无法弄清楚。

我想使用哨兵节点。因此,第一个节点的数据字段中包含 "",最后一个节点的数据字段中包含 177。这是我第一次使用哨兵节点,我的老师希望我们使用它们,所以如果有错误,我深表歉意。

感谢您的帮助。

#define DUMMY_TRAILER '\177'

typedef struct node NODE;
struct node
{
char data[20]; //for sentinel nodes
char parkName[20];
NODE *forw;
NODE *back;
};

FILE *Open(void); // Opens file
NODE *init_list(void); //Creates the sentinel nodes
void insert(NODE *list, char *name); //Inserts nodes into list
void traverse_forw(NODE *list); // Traverse the list and prints

主要

 int _tmain(int argc, _TCHAR* argv[])
{
FILE* inputFile;
NODE *list;
char tempName[31];

inputFile = Open();
list = init_list();
while(fgets(tempName, 31, inputFile) != NULL)
{
insert(list, tempName);
FLUSH;
}
traverse_forw(list);

free(list);

return 0;
}

插入函数

        void insert(NODE *list, char *data)
{
NODE *curr = list->forw;
NODE *prev = list;
NODE *pnew;
int duplicate = 1;

// search
while (strcmp(data,curr->data) > 0)
{
prev = curr;
curr = curr->forw;
}

if (strcmp(data, curr->data))
{
duplicate = 0; // not a duplicate
pnew = (NODE *) malloc(sizeof (NODE));
if (!pnew)
{
printf("Fatal memory allocation error in insert!\n");
exit(3);
}
strcpy(pnew->parkName, data);
pnew->forw = curr;
pnew->back = prev;
prev->forw = pnew;
curr->back = pnew;
}
return;
}

遍历打印公园名称

void traverse_forw(NODE *list)
{
putchar('\n');
list = list->forw; // skip the dummy node
while (list->data[0] != DUMMY_TRAILER)
{
printf("%s\n", list->parkName);
list = list->forw;
}
return;
}

最佳答案

您正在将文件读取行存储到 parkName 中,但比较是基于 data 字段

关于c - 按字母顺序插入双链表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34985962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com