gpt4 book ai didi

c - 链接列表打印和添加元素

转载 作者:行者123 更新时间:2023-11-30 17:47:00 24 4
gpt4 key购买 nike

所以我的想法是我有一个定义为结构的双向链表

struct Node
{
struct Node *next;
struct Node *prev;
char value[5];
};

struct DoubleLinkedList
{
int size;
struct Node *head;
struct Node *tail;
};

我正在使用 InsertionSort 函数插入到列表中。我将指向双向链接列表的指针作为参数传递给该列表,并通过向列表中添加新的 4 个字符字符串节点(按字典顺序排序的链接列表)来对其进行修改。然后,我打印添加了每个字符串节点的链表。

事实证明打印有问题。现在,使用下面的代码,输出总是类似于(假设每一步插入的字符串是 aaaa、bbbb、cccc...)

啊啊啊

bbbb -> bbbb

cccc -> cccc -> cccc

由于某种原因,链表结构正在将每个节点更改为要插入的新字符串的值;我不知道为什么!而且,如果我尝试将打印 block 转移到主函数,它会打印出乱码。

int main()
{
struct DoubleLinkedList strings;
while (1)
{
sleep(1);
char s[5];
GenerateRandomString(s,4);
InsertionSort(&strings, s);
}
return 0;
}

void InsertionSort(struct DoubleLinkedList *sorted, char *randomstring)
{
struct Node new;
strcpy(new.value,randomstring);
printf("Newvalue %s\n", new.value);
if ((*sorted).size == 0)
{
new.next = NULL;
new.prev = NULL;
(*sorted).head = &(new);
(*sorted).tail = &(new);
}
else
{
printf("TEST %s\n", (*(*sorted).head).value);
struct Node *current;
current = (*sorted).head;
printf("CURRENT %s\n", (*current).value);
while (strcmp(randomstring,(*current).value) > 0)
{
current = (*current).next;
if (current = NULL)
{
break;
}
}
new.next = current;
if (current != NULL)
{
new.prev = (*current).prev;
if ((*current).prev != NULL)
{
(*(*current).prev).next = &(new);
}
else
{
(*sorted).head = &(new);
}
(*current).prev = &(new);
}
else
{
new.prev = (*sorted).tail;
(*((*sorted).tail)).next = &(new);
(*sorted).tail = &(new);
}
}
(*sorted).size++;
struct Node *printing;
printing = (*sorted).head;
int i;
for (i = 0; i < (*sorted).size - 1; i++)
{
printf("%s -> ", (*printing).value);
printing = (*printing).next;
}
printf("%s\n",(*printing).value);
}

最佳答案

您尚未为中的值分配内存 strcpy(new.value,随机字符串);你很幸运你后续的 printf 可以工作。

例如,你可以这样做

new.value = strdup(randomstring);

(如果删除节点,请不要忘记使用 free(new.value) 释放内存,因为 strdup 会调用 malloc)。

关于c - 链接列表打印和添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19071763/

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