线性表在逻辑相邻且在物理上相邻,他们各个元素之间的地址都是连续的。而链表,顾名思义逻辑相邻的两个元素在物理上是不相邻的,元素之间地址不连续。
链表与线性表的优缺点:
线性表优点:
- 物理位置连续,可以快速存取线性表中任意位置的元素;
- 查找效率高;
线性表缺点:
- 插入或删除需要移动大量的元素,效率低;
- 线性表长度难以确定;可能浪费内存;
- 数组大小固定,不能动态扩展;
- 内存要求较高,需要足够且连续的内存空间;
链表优点:
- 插入删除无需移动数据,效率高;
- 内存利用率高,不会浪费;
- 大小没有固定,拓展很灵活;
链表缺点:
- 不能随即查找,只能从第一个快开始遍历,查找效率低;
我们先定义一个结构结构,最简单的链表:
struct link{ //定义一个结构格式
int data; //数据域
struct link *next; //指针域
};
typedef struct link Link; //给结构体起一个别名叫做:Link
先来看一看最基本的操作,向链表里插入一个结点:
link *head=NULL,*p; //定义头指针head、工作指针p
p=(link*)malloc(sizeof(link)); //向系统申请一块空间
p->data=10; //给数据域赋值
p->next=NULL; //后继结点为空
head=p; //让head=p
现在用头插法向链表中插入数据:
for(i=0;i<10;i++){ //用头插法向链表中插入
p=(link*)malloc(sizeof(link));
p->data=i+1;
p->next=head;
head=p;
}
for(i=0,p=head;i<10;i++,p=p->next){ //输出链表数据
cout<<p->data<<"\t";
}

7702

被折叠的 条评论
为什么被折叠?



