1.顺序表的特点:用数组存储数据元素,操作简单,无需为节点的逻辑关系增加额外的开销,存储密度高,可按照元素的位序添加元素。 缺点:a.插入和删除的时候需要移动大量数据,效率极其低。 b.占用的是连续的存储空间,这个空间要预先分配,但分配前不能确定分配多少,分配多了浪费,分配少了不够。 链式表的特点: 优点:不用事先估计存储空间的大小,存储密度较低。 缺点:单链表附加指针域,浪费了太多内存。
2.单链表的基本操作: 用单链表可以解决顺序表需要连续的大量的存储空间的缺点,但是单链表附加了指针域,也浪费了很多存储空间。(指针域里面保 存的是下一个节点的地址)。 头结点:为了操作方便,在单链表的第一个节点前再加一个节点叫头结点。头结点的数据域存放在下一个节点的指针域 。 (1)头插法: 在头结点后面插入
头插法的原理如下所示:
p->num=L;//把头结点放入插入的节点p中
p->next=l->next; //把第二个节点放入要插入节点的后继。
l->next=p;//把要插入的节点P放入头结点
实例:
#include <stdio.h>
#include <stdlib.h>
#define N 10
struct Data{
int num;
struct Data *next;
};
int main ( int argc , char * argv[])
{
int data,i;
struct Data *head,*p;
head = (struct Data *)malloc (sizeof(struct Data));
head->next = NULL;
for ( i = 0; i < N; i++)
{
scanf ("%d",&data);
p = ( struct Data *)malloc(sizeof(struct Data));
p->num = data;
p->next = head->next;
head->next = p;
}
printf("the list is :");
while (p!=NULL)
{
printf("%d\t",p->num);
p=p->next;
}
printf("\n");
return 0;
}
结果:
liuzj@ET302Buildver:~/zhanghong/make/toucha$ vim 11.c
liuzj@ET302Buildver:~/zhanghong/make/toucha$ gcc 11.c
liuzj@ET302Buildver:~/zhanghong/make/toucha$ ./a.out
2
3
4
5
6
7
8
9
10
11
the list is :11 10 9 8 7 6 5 4 3 2