## 第17章 高级数据表示 17.2 从数组到链表 顶原

idreamo

``````#define TSIZE 45  /*存放片名的数组大小*/
#define FMAX 500  /*最多的影片数*/
struct film {
char title[TSIZE];
int rating;
};
...
struct film *movies[FMAX]; /*指向结构的指针的数组*/
int i;
...
movies[i]=(struct film *)malloc(sizeof(stuct film));``````

``````#define TSIZE 45 /*存放片名的数组的大小*/
struct film {
char title[TSIZE];
int rating;
struct film *next;
}``````

``````struct film{
char title[TSIZE];
int rating;
struct film *next;
};

17.2.1  使用链表

``````/*film2.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 *prev,*current;
char input[TSIZE];

/*收集并存储信息*/
puts("Enter first movie title: ");
while(gets(input) != NULL && input[0] != '\0')
{
current = (struct film *)malloc(sizeof(struct film));
else   /*后续结构*/
prev->next = current;
current->next = NULL;
strcpy(current->title,input);
scanf("%d",&current->rating);
while(getchar()!='\n')
continue;
puts("Enter next movie title (empty line to stop): ");
prev = current;
}
/*给出电影列表*/
printf("No data entered. ");
else
printf("Here is the movie list: \n");
while(current != NULL)
{
printf("Movie: %s Rating: %d\n",current->title,current->rating);
current = current->next;
}
/*任务已完成，因此释放所分配的内存*/
while(current != NULL)
{
free(current);
current = current->next;
}
printf("Bye!\n");

return 0;
}
``````

printf("Movie: %s Rating: %d\n",current->title,current->rating);

current = current->next;

``````while(current != NULL)
{
printf("Movie: %s Rating: %d\n",current->title,current->rating);
current = current->next;
}``````

1、使用malloc()函数为一个结构分配足够的空间；

2、存储这个结构的地址；

3、把正确的信息复制到这个结构；

while(gets(input)!=NULL && input[0]!='\0')

current = (struct film *)malloc(sizeof(struct film));

``````if(head == NULL)  /*第一个结构*/
else              /*后续结构*/
prev->next = current;``````

``````current->next = NULL;
strcpy(current->title,input);
scanf("%d",&current->rating);``````

prev = current;

``````Enter first movie title:
Spirited Away
8
Enter next movie title <empty line to stop>:
The Duelists
7
Enter next movie title <empty line to stop>:
Devil Dog:The Mound of Hound
1
Enter next movie title <empty line to stop>:

Here is the movie list :
Movie: Spirited Away Rating: 8
Movie: The Duelists Rating: 7
Movie: Devil Dog: The Mound of Hound Rating: 1
Bye!``````

``````current = head;

while(current != NULL)
{
free(current);
current = current->next;
}``````

17.2.2 反思

film2.c程序有一些不足。比如，它没有检查malloc()是否找到需要的内存，并且它不提供删除列表中的项目的功能。但是这些不足是可以解决的。比如可以添加检查malloc()的返回值是否为NULL（表示它无法获得所需内存）的代码。如果需要程序删除项目，需要编写更多的代码来实现 。

### idreamo

《java数据结构和算法》读书笔记

《Java多线程编程核心技术》读书笔记 常用数据结构 第2章 数组 最简单的数据结构，在查找上比链表有优势，但是在插入与删除上比不上链表。 Java中的数组有长度限制，为int值。在内存模型中，...

2016/05/27
229
0

程序 = 数据结构 + 算法 　　——图灵奖得主，计算机科学家N.Wirth(沃斯) 　　 　　作为程序员，我们做机器学习也好，做python开发也好，java开发也好。 　　有一种对所有程序员无一...

java进阶架构师
2018/10/25
0
0
python算法-1.简介/2.选择排序

2017/12/15
0
0

francs.tan
2018/08/12
0
0

tony关东升
2016/02/24
0
0

Excption与Error包结构，OOM 你遇到过哪些情况，SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类，Throwable 包含两个子类，Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常（checked Exc...

Garphy

5
0

FAT_mt

6
0

7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column，设type属性为selction即可； 2、@selection-change事件：选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing

6
0
【技术分享】TestFlight测试的流程文档

qtb999

10
0