gpt4 book ai didi

c - 存储从 1 到 1000 的素数的链表

转载 作者:行者123 更新时间:2023-12-04 18:22:37 25 4
gpt4 key购买 nike

正如您将在以下程序的注释中看到的那样,我应该创建一个列表来存储从 1 到 1000 的所有素数并释放节点。

其中只有两个功能是我的工作。但是,我已经很久没有弄清楚为什么这个程序不能编译了。各位看错了吗?这是一个已经交上来的作业,所以仅供我个人引用。

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

/* given data structure declaration */
struct record {
int data;
struct record * next;
};

typedef struct record RecordType;



/* DO NOT MODIFY */
/* print a list */
void print_list(RecordType * list)
{
RecordType * visitor = list;
int count = 0;

while (visitor != NULL)
{
printf("%d ", visitor->data);
visitor = visitor->next;
count++;
}
printf("\n");
printf("There are %d items in the list.\n", count);
}



/* MY WORK HERE */
/* free every node in the list */
void free_list(RecordType * list)
{
while (list->data != 2){
free(list->next);
list->next = list;
}
}

/* MY WORK HERE */
/* this function may call other functions created by students */
/* create a list storing all prime numbers in [1, 1000] in ascending order */
/* return a pointer to the starting point of the list */
RecordType * create_list_prime_in_1_to_1000()
{
RecordType * begin, *tail, *temp;
int i = 0;
begin = malloc(sizeof(RecordType));
begin->data = 0;
begin->next = NULL;
tail = begin;
while(i<1000){
temp = malloc(sizeof(RecordType));
temp -> data = ++i;
tail -> next = temp;
tail -> temp;
tail -> next = NULL;
}
}

int isPrime(int n){
int d;

for (d = 2; d < n; d = d + 1)
if (n % d == 0)
return 0;

return 1;
}





/* DO NOT MODIFY */
/* main program */
int main(void)
{
RecordType * start;

/* create a linked list to store all the prime numbers in 1 - 10 */
/* this is a naive way by hard-coding */

start = malloc(sizeof(RecordType));
start->data = 2;
start->next = malloc(sizeof(RecordType));
start->next->data = 3;
start->next->next = malloc(sizeof(RecordType));
start->next->next->data = 5;
start->next->next->next = malloc(sizeof(RecordType));
start->next->next->next->data = 7;
start->next->next->next->next = NULL;

print_list(start);

free_list(start);


/* i am expected to expected to build a list iteratively rather than hard-code */

start = create_list_prime_in_1_to_1000();

print_list(start);

free_list(start);

return 0;
}

最佳答案

你有 tail声明为:

RecordType * begin, *tail, *temp;

RecordType作为:
struct record {
int data;
struct record * next;
};
typedef struct record RecordType;

接下来你有:
tail -> temp;

不能作为 RecordType没有名为 temp 的成员。

我认为应该是:
tail = temp;

运行时错误的原因似乎是因为:
void free_list(RecordType * list)
{
while (list->data != 2){
free(list->next);
list->next = list;
}
}

这是不正确的。你需要类似的东西:
void free_list(RecordType * list)
{
// keep going till there are nodes.
while (list){
// save the link to the rest of the nodes.
RecordType *temp = list->next;

// free the current node.
free(list);

// repeat the process starting at the next node.
list = temp;
}
}

关于c - 存储从 1 到 1000 的素数的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10350724/

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