gpt4 book ai didi

c - 将一个链表指向另一个链表

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

我的任务是将电影列表存储在一个数组中,并将 Actor 姓名存储在另一个数组中,并确保电影名称指向相应的 Actor 。我正在使用链接列表。我在将 Actor 的地址存储到电影结构中以便它可以指向它时遇到了困难。代码在c中。请帮忙!

struct movie
{
char name[10];
struct movie *data;
struct movie *next;
};

typedef struct movie m;

m *insert(m *first, char actor[10], int i)
{
m *cur;
cur = (m *)malloc(sizeof(m));
printf("\nEnter movie name: ");
scanf("%s", cur->name);
printf("\nEnter actor name: ");
scanf("%s", actor);
cur->data = &actor;
cur->next = first;
printf("\n%d", &actor);
printf("\n%d", cur->data);
printf("\n%s", actor);
printf("\n%s", *cur->data);
return (cur);
}

int main()
{
m *first = NULL, *ptr = NULL, *ptr1;
char actor[10];
int i = 0, ch;
first = (m *)malloc(sizeof(m));
ptr = (m *)malloc(sizeof(m));
do
{
printf("\n1.Enter movie: ");
printf("\n2.Search movie: ");
printf("\n3.Exit");
printf("\nEnter your choice: ");
scanf("%d", &ch);
switch(ch)
{
case 1:
first = insert(first, actor, i);
break;
case 2:
if(first == NULL)
{
printf("\nList Empty!");
break;
}
else
{
printf("\nEnter movie name: ");
scanf("%s", ptr->name);
ptr1 = first;
while(ptr1->next != NULL)
{
if(strcmp(ptr->name, first->name)==0)
{
printf("\n%s", &ptr->data);
break;
}
else
{
printf("\nNot found");
}
ptr1 = ptr1->next;
}
}
break;
}
}while(ch != 3);
}

最佳答案

好吧,我假设您想将 Actor 姓名存储在电影结构的数据部分。如果是这种情况,那么最好的做法是对变量使用描述性名称。所以我会将结构更改为

struct movie

{
struct char name[10];
struct actor_t *actor; //we will define that later
struct movie *next;
};

好的,不,您需要实际创建该 Actor 结构。除了 Actor 名字之外,您还需要存储其他内容吗?如果您只需要一个名称,那么您可以简单地执行以下操作:

 struct actor_t 
{
char name[10];
struct actor_t *next;
}

我认为 Actor 也应该在一个列表中(而不是您编写的数组),这就是为什么您需要一个下一个指针来导航到所有 Actor 。

(提示:如果此任务是出于教育目的,那么您可能会同意。使用 hash table 按姓名搜索 Actor 会更有效)

每次(通过 scanf)获取 Actor 名称时,都必须为 Actor 列表节点腾出一些空间。

struct actor_t *new_actor = malloc(sizeof(*new_actor));

现在您已经为新参与者创建了空间,请将刚刚从输入中获得的字符串复制到参与者结构中:

strncpy(new_actor->name, actor, strlen(actor));

好的,现在你有了第一个 Actor 了。最初,它是 actor 列表中的唯一节点,因此您需要将 next 指针设置为 null。

new_actor->next = NULL;

假设您已经为电影节点分配了空间,请使该电影的 actor 指向您刚刚创建的 actor 节点:

cur->actor = new_actor;

现在,如果您有另一部电影,由同一位 Actor 主演,您可以像这样指向同一位 Actor :

next_movie->actor = new_actor; //or whatever nave you gave to the first actor node

一些想法:一部电影只针对一个 Actor 似乎并不正常。你确定这是你的任务吗?你的电影需要指定几个 Actor 吗?如果是,那是一个完全不同的问题。

您必须计算出此代码。我只是给了您一些关于如何完成一些简单任务的想法,但基本上您需要一些列表操作的练习。并且ofc 需要亲自动手。

关于c - 将一个链表指向另一个链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27189707/

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