1. 程式人生 > >實現單鏈表的倒序

實現單鏈表的倒序

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;
}

結果:

[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