實現單鏈表的倒序
1.順序表的特點:用陣列儲存資料元素,操作簡單,無需為節點的邏輯關係增加額外的開銷,儲存密度高,可按照元素的位序新增元素。 缺點:a.插入和刪除的時候需要移動大量資料,效率極其低。 b.佔用的是連續的儲存空間,這個空間要預先分配,但分配前不能確定分配多少,分配多了浪費,分配少了不夠。 鏈式表的特點: 優點:不用事先估計儲存空間的大小,儲存密度較低。 缺點:單鏈表附加指標域,浪費了太多記憶體。
2.單鏈表的基本操作: 用單鏈表可以解決順序表需要連續的大量的儲存空間的缺點,但是單鏈表附加了指標域,也浪費了很多儲存空間。(指標域裡面保 存的是下一個節點的地址)。 頭結點:為了操作方便,在單鏈表的第一個節點前再加一個節點叫頭結點。頭結點的資料域存放在下一個節點的指標域
頭插法的原理如下所示:
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;
}
結果:
[email protected]:~/zhanghong/make/toucha$ vim 11.c
[email protected]:~/zhanghong/make/toucha$ gcc 11.c
[email protected]:~/zhanghong/make/toucha$ ./a.out
2
3
4
5
6
7
8
9
10
11
the list is :111098765432