我的任务是将电影列表存储在一个数组中,并将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);
}
答案 0 :(得分:0)
好的,我假设您要将actor名称存储在影片结构的数据部分。如果是这种情况,那么最佳做法是为变量使用描述性名称。所以我会将结构更改为
struct movie
{
struct char name[10];
struct actor_t *actor; //we will define that later
struct movie *next;
};
好的,你不需要真正创建那个actor结构。你需要存储演员姓名以外的任何东西吗?如果您只需要一个名字,那么您可以这样做:
struct actor_t
{
char name[10];
struct actor_t *next;
}
我认为演员也应该在列表中(而不是你写的数组),这就是为什么你需要一个导航到所有演员的下一个指针的原因。
(提示:如果此任务是出于教育目的,那么您可能已经确定了。使用hash table按名称搜索演员会更有效率)
每次(通过scanf)获得一个actor名称时,你必须为一个actor列表节点留出一些空间。
struct actor_t *new_actor = malloc(sizeof(*new_actor));
现在您已经为新actor创建了空间,将您刚刚从输入中获得的字符串复制到actor结构中:
strncpy(new_actor->name, actor, strlen(actor));
好的,你现在有了第一个演员。最初,它是actors列表中唯一的节点,因此您要将下一个指针设置为null。
new_actor->next = NULL;
假设您已经为电影节点设置了malloced空间,请让该电影的演员指向您刚刚创建的actor节点:
cur->actor = new_actor;
现在,如果你有另一部电影,同一个演员你可以指向同一个演员:
next_movie->actor = new_actor; //or whatever nave you gave to the first actor node
一些想法:电影指向一个演员似乎不正常。你确定这是你的任务吗?你的电影需要指向几个演员吗?如果是,那是一个完全不同的问题。
您必须完成此代码。我刚刚给你一些关于如何完成一些简单任务的想法,但基本上你需要一些关于列表操作的练习。而且你的手脏了。