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

时间:2014-11-28 13:26:24

标签: c

我的任务是将电影列表存储在一个数组中,并将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);
}

1 个答案:

答案 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

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

您必须完成此代码。我刚刚给你一些关于如何完成一些简单任务的想法,但基本上你需要一些关于列表操作的练习。而且你的手脏了。