gpt4 book ai didi

类似蛋糕的链表

转载 作者:行者123 更新时间:2023-11-30 15:24:42 26 4
gpt4 key购买 nike

对于完全缺乏专业知识,我提前表示歉意......但前段时间我被要求列出一个数字的所有因数。虽然我确信还有其他更有效的方法,我的具体想法是创建一个这样形式的结构:

...
struct f{
int a;
struct f *b;
int c;
};

struct f factor = {

{factor_first, factor+1, factor_last},

{factor_second,factor+2, factor_second-to-last},

....(continued)

}

最终的结构如下:

factor = {factor_first, factor_second, factor_third ... ,factor_last}

问题在于:

1)我不知道会有多少因素,因此列表会有多长。

2)如果我成功创建了列表,如何消除最终对factor+ some #的引用,以便列表是连续的?

3)我本来打算使用 for 循环,但意识到我可能无法执行以下操作:

if (n%i==0) /* n is the number to be factored, by the way */

factor+i = {i, factor+i+1, n/i}

4)所以总而言之,我完全一无所知......

无论如何,我知道有比这更好的方法来找到数字的因子,但由于我是初学者,我只是好奇如何(如果可能)我能够实现这一点。 (以这种特殊的方式制作类似蛋糕的链表)

<小时/>

看到评论后,我决定尝试应用它:

#include <stdio.h>
#include <stdlib.h>
main()
{

typedef struct f{
int a;
struct f *b;
int c;
} FACTOR;

int n, i, j = 0;

scanf_s("%d", &n, sizeof(&n)); /*gets n*/

FACTOR *pTF;
FACTOR *head = pTF;

for (i = 1; i*i <= n; i++)
{
if (n%i == 0)
{
pTF = malloc(sizeof(struct f));
pTF[j]->a = i;
pTF[j]->c = n / i;
pTF[j]->b = malloc(sizeof(struct f));
pTF[j + 1] = malloc(sizeof(struct f));
pTF[j]->b = pTF[0 + j + 1];
j++;
}

}
}

不知怎的,它不起作用......我认为这与结构体和指针之间的转换,但我似乎无法理解它:(

我想我不能方便地通过 pTF[行号] 调用行?但我还能怎么做呢?

<小时/>

一个月后,我回来了一个解决方案:

#include <stdio.h>
#include <stdlib.h>

typedef struct f{
int s;
struct f *link;
int b;
} FACT;

Factprint(FACT *a) //prints this structure in correct sequence.
{
if(a != NULL)
{
printf("%d ", a->s);
Factprint(a->link);
if(a->s!=a->b) printf("%d ", a->b); //skips a square
}
}

int main()
{
int num, i;
scanf("%d", &num);
FACT *x, *tmp_1, *tmp_2;
x = malloc(sizeof(FACT));
tmp_1 = x;
i = 1;

for (i = 1; i*i <= num; i++)
{
if (num%i == 0) //a factor
{
tmp_2 = malloc(sizeof(FACT));
tmp_2->s = i; //first get the factors
tmp_2->link = '\0';
tmp_2->b = num / i;
tmp_1->link = tmp_2; // then connect to the previous link
tmp_1 = tmp_2; //now go down the link...
}
}

Factprint(x->link);
}

最佳答案

定义一个指针struct f *pointerToFactor,并通过struct f *head = pointerToFator保存对第一个因子的引用,以便需要时遍历链表.

pointerToFactor = malloc(sizeof(struct f));
pointerToFactor->a = factor_first;
pointerToFactor->c = factor_last;

当你得到第二个因素

pointerToFactor->b = malloc(sizeOf(struct f));
struct f *temp = pointerToFactor->b;
temp->a = factor_second;
pointerToFactor->c = factor_second_last;

并循环遍历所有因素,这样您就得到了所有因素的链接列表。

编辑

指针增量的工作方式完全不同。假设,我有一个指针,它指向一个大小为 20 的结构,基地址为 4090。如果我递增数组,比如指针 [1],现在指针指向5010,即20的下一个内存块。指针增量取决于分配给元素的大小。

关于类似蛋糕的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28292670/

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