从数组到链表2
从数组到链表2 理想的情况是,用户可以不确定地添加数据(或者不断添加数据直到用完内存量),而不是先指定要输入多少项,也不用程序分配多余的空间。这可以通过在输入每一项后调用malloc()分配正好能储存该项的空间。如果用户输入3部影片,程序就调用malloc()3次;如果用户输入300部影片,程序就调用malloc()300次。 不过我们又制造了一个麻烦。比较一下一种方法是调用malloc()一次,为300个filem结构请求分配足够的空间;另一种方法是调用malloc()300次,分别为每个file结构请求分配足够的空间。前者分配的是连续的内存块,只需要一个单独的指向struct变量的指针,该指针指向已分配块中的第一个结构。简单的数组表示法让指针访问块中的每个结构,如前面代码段所示。第二种方法的问题是,无法保证每次调用malloc()都能分配到连续的内存块。这意味着结构不一定被连续储存。如图1,因此,与第一种方法储存一个指向300个结构块的指针相比,你需要储存300个指针,每个指针指向一个单独存储的结构。 一种解决方法是创建一个大型的指针数组,并在分配新结构时逐个给这些指针赋值,但是我们不打算使用这种方法: # define TSIZE 45 //储存片名的数组大小 # define FMAX 500 //影片的最大数量 struct film { char title [