數據結構與算法-學習筆記6

單鏈表的整表創建、刪除

單鏈表的整表創建

思路:

-聲明一個結點p和計數器變量i

-初始化一個空鏈表L

-讓L的頭結點的指針指向NULL,即建立一個帶頭結點的單鏈表;

-循環實現賦值和插入

頭插法建表

從一個空表開始,生成新結點,讀取數據存放到新節點的數據域中,然後將新節點插入到當前鏈表的表頭上,直到結束爲止。

如,我們將hello插入鏈表中

wKiom1SQ97eiNNkOAABxHky5m4Y505.jpg

代碼:

void CreateListHead(LinkList *L,int e)

{

    LinkList p;

    int i;

    srand(time(0));//隨機種子,與time結合模擬隨機數的效果

    *L = (LinkList)malloc(sizeof(Node));//malloc生成一個結點

    (*L)->next = NULL;

    for(i = 0;i<n;i++)

    {

        p = (LinkList)malloc(sizeof(Node));

        p->data = rand()%100+1;//rand產生隨機數,%100生成0~99的數

        p->next = (*L)->next;

        (*L)->next = p;

    }

}

尾插法

與頭插法相反

wKioL1SQ-MrgnONNAABwWfAc3sE276.jpg


void CreateListHead(LinkList *L,int e)

{

    LinkList p,r;

    int i;

    srand(time(0));//隨機種子,與time結合模擬隨機數的效果

    *L = (LinkList)malloc(sizeof(Node));//malloc生成一個結點

    r = *L;

    for(i = 0;i<n;i++)

    {

        p = (Node *)malloc(sizeof(Node));

        p->data = rand()%100+1;//rand產生隨機數,%100生成0~99的數

        p->next = p;

        r = p;  //更改節點名的過程

    }

    p->next = NULL;

}

單鏈表的整表刪除

思路:

-聲明結點p和q

-將第一個結點賦值給p,下一個結點賦值給q

-循環執行釋放p和q賦值給p的操作

代碼:

status ClearList(LinkList *L)

{

    LinkList p,q;

    p=(*L)->next;

    while(p)

    {

        q = p->next;

        free(p);

        p =q;

    }

    (*L)->next = NULL;

    return OK;

}

單鏈表與順序表存儲結構優缺點


存儲方式
時間性能
空間性能
順序存儲

連續存儲單元依次存儲

線性表的數據元素

插入:O(1)

插入和刪除:平均移動

表長的一半元素,時間

爲O(n)

容易溢出
單鏈表

用一組任意的存儲單元

存放元素

插入:O(n)

插入和刪除:計算位置

指針,時間僅爲O(1)

不需要分配存儲空間

若線性表需要頻繁查找,很少插入和刪除,宜採用順序存儲結構

若線性表頻繁插入和刪除時,宜採用單鏈表結構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章