中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

單鏈表一[帶頭節點鏈表]

發布時間:2020-08-17 15:51:58 來源:網絡 閱讀:512 作者:風子余 欄目:編程語言

單鏈表實現分帶頭節點鏈表和不帶頭節點鏈表:

使用頭文件如下:

struct LinkNode
{
    void *x; 
    struct LinkNode *next;
};

一,帶頭節點的鏈表:

1,鏈表創建

    程序說明:

    1)函數調用形式:szyu_link_create0("AA", "BB", NULL);其中NULL結尾是在for循環的判斷結束條件為x == NULL。使用NULL可以是for循環正常退出

    2)程序先創建頭節點head,并初始化head節點

    3)聲明指向尾節點的last,并用head進行初始化。

    4)for循環中第一次使用的x是入參中的x。

    5)初始化新增節點,并將尾節點的next指針指向新增節點。并將尾節點指向新增節點

    6)使用了va_start()記得結尾使用va_end()

    7)新增第一個節點時使用last->next = node。此時的last和head是相等的。相當于head->next = node。

struct LinkNode
*szyu_link_create0(void *x, ...)
{
    struct LinkNode *head = NULL;
    head = (struct LinkNode *)malloc(sizeof(struct LinkNode));
    if ( head == NULL )
    {   
        return head;
    }   

    head->next = NULL;

    struct LinkNode *last = head;

    va_list args;
    va_start(args, x); 

    for ( ; x ; x = va_arg(args, void *) )
    {   
        struct LinkNode *node = NULL;
        node = (struct LinkNode *)malloc(sizeof(struct LinkNode));
        if ( node == NULL )
        {   
            return head;
        }

        node->x = x;
        node->next = NULL;
        
        last->next = node;
        last = node;
    }
    va_end(args);

    return head;
}

2,鏈表插入

    程序說明:

    1)key < 1保證插入的下標不能出現比一小;key - 1 > len保證在鏈表最后面能插入節點。

    2)cnt = 1而不是0是保證節點停留在插入位置的前一節點。

    3)添加節點到相應的位置即可。

struct LinkNode
*szyu_link_insert0(struct LinkNode *head, void *x, int key)
{
    if ( head == NULL )
    {
        return head;
    }

    int len = szyu_link_length(head);
    if ( key < 1 || key - 1 > len )
    {
        return head;
    }

    struct LinkNode *insert = head;

    int cnt = 1;
    for ( ; cnt < key; cnt++ )
    {
        insert = insert->next;
    }

    struct LinkNode *node = NULL;
    node = (struct LinkNode *)malloc(sizeof(struct LinkNode));
    if ( node == NULL )
    {                                                                                     
        return head;
    }

    node->x = x;
    node->next = insert->next;

    insert->next = node;

    return head;
}

3,鏈表長度獲取

    程序說明:

    1)過掉頭節點,再開始獲取長度。

int
szyu_link_length(struct LinkNode *head)
{
    if ( head == NULL )
    {
        return 0;
    }

    struct LinkNode *plen = head->next;

    int length = 0;
    for ( ; plen != NULL; plen = plen->next )
    {
        length++;
    }

    return length;
}

4,鏈表打印:

    程序說明:

    1)如果鏈表為空,獲取只有頭節點,則直接返回。

    2)輸出時,由于結構體存的void *,故輸出需進行類型轉換才行。

void
szyu_link_print0(struct LinkNode *head)
{
    if ( head == NULL || head->next == NULL )
    {
        return;
    }

    struct LinkNode *print = head->next;
    int len;
    for ( len = 0; print != NULL; print = print->next )
    {
        printf("%s ", (char *)print->x);
    }

    printf("\n");
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

晋宁县| 鱼台县| 紫金县| 昭平县| 温宿县| 赤水市| 嘉黎县| 同仁县| 会宁县| 永昌县| 栖霞市| 阳曲县| 建德市| 集安市| 勃利县| 梓潼县| 堆龙德庆县| 九龙坡区| 和龙市| 荆州市| 朝阳区| 昆明市| 乌拉特中旗| 建德市| 阿巴嘎旗| 白银市| 平泉县| 宁波市| 延川县| 温泉县| 安顺市| 常宁市| 收藏| 通江县| 上栗县| 谢通门县| 平潭县| 吉木乃县| 新乡县| 且末县| 砀山县|