首页 > 试题广场 >

为什么程序清单17.2中的链表只能沿一个方向遍历?怎样修改s

[问答题]
为什么下面程序中的链表只能沿一个方向遍历?怎样修改struct film的定义才能双向遍历链表?
/* films2.c -- 使用结构链表 */
#include <stdio.h>
#include <stdlib.h>         /* 提供malloc()原型 */
#include <string.h>         /* 提供strcpy()原型 */
#define TSIZE 45            /* 存放片名的数组大小 */
struct film {
    char title[TSIZE];
    int rating;
    struct film * next;     /* 指向链表的下一个结构 */
};
int main (void)
{
    struct film * head = NULL;
    struct film * prev, * current;
    char input[TSIZE];
    /* 收集并存储信息 */
    puts ("Enter first movie title: ");
    while (gets (input) != NULL && input[0] != '\0')
    {
        current = (struct film *)malloc(sizeof (struct film));
        if (head == NULL) /* 第一个结构 */
            head = currend;
        else
            prev->next = current;
        current->next = NULL;
        strcpy (current->title, input);
        puts ("Enter your rating <0-10>: ");
        scanf ("%d", &current->rating);
        while (getchar () != '\n')
            continue;
        puts ("Enter next movie title (empty line to stop): ");
        prev = current;
    }
    /* 给出电影列表 */
    if (head = NULL)
       printf("No data entered. ");
    else
       printf ("Here is the movie list: \n");
    current = head;
    while (current != NULL)
    {
        printf("Movie: %s Rating: %d\n", current->title, current->rating);
        current = current->next;
    }
    /* 任务已经完成,因此释放所分配的内存 */
    current = head;
    while (current != NULL)
    {
        free (current);
        current = current->next;
    }
    printf("Bye!\n");
    return 0;
}
推荐
这个列表只能沿一个方向进行遍历,因为每个结构中包含着下一个结构的地址,但是没有包含前一个结构的地址。可以对结构定义进行修改,使每个结构包含两个指针,一个指向前一个结构,另一个指向下一个结构。当然程序也要在每次添加一个新结构时为这些指针赋予正确的地址值。
发表于 2018-03-26 21:21:24 回复(0)