首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言實例練習

C語言練習實例74:鏈表操作綜合示例(創建、排序、拼接、刪除)

     編輯:C 語言實例練習

C語言練習實例74:鏈表操作綜合示例(創建、排序、拼接、刪除)

本實例展示單鏈表的完整操作:節點創建、選擇排序、節點刪除、鏈表拼接。

核心功能

  • create_list:根據數組動態創建鏈表,返回頭指針。
  • selection_sort:選擇排序,每輪找最小節點輸出並從鏈表中刪除(破壞性排序)。
  • delete_node:支持刪除首節點、尾節點、中間節點。
  • concatenate:將第二個鏈表接在第一個鏈表尾部。

源代碼

// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鳥教程. All rights reserved.
//
#include <stdlib.h>
#include <stdio.h>

struct list {
    int data;
    struct list *next;
};
typedef struct list node;
typedef node *link;

link delete_node(link pointer, link tmp) {
    if (tmp == NULL) return pointer->next;
    else {
        if (tmp->next->next == NULL) tmp->next = NULL;
        else tmp->next = tmp->next->next;
        return pointer;
    }
}

void selection_sort(link pointer, int num) {
    link tmp, btmp;
    int i, min;
    for (i = 0; i < num; i++) {
        tmp = pointer;
        min = tmp->data;
        btmp = NULL;
        while (tmp->next) {
            if (min > tmp->next->data) {
                min = tmp->next->data;
                btmp = tmp;
            }
            tmp = tmp->next;
        }
        printf("%d\n", min);
        pointer = delete_node(pointer, btmp);
    }
}

link create_list(int array[], int num) {
    link tmp1, tmp2, pointer;
    int i;
    pointer = (link)malloc(sizeof(node));
    pointer->data = array[0];
    tmp1 = pointer;
    for (i = 1; i < num; i++) {
        tmp2 = (link)malloc(sizeof(node));
        tmp2->next = NULL;
        tmp2->data = array[i];
        tmp1->next = tmp2;
        tmp1 = tmp1->next;
    }
    return pointer;
}

link concatenate(link pointer1, link pointer2) {
    link tmp = pointer1;
    while (tmp->next) tmp = tmp->next;
    tmp->next = pointer2;
    return pointer1;
}

void main(void) {
    int arr1[] = {3, 12, 8, 9, 11};
    link ptr;
    ptr = create_list(arr1, 5);
    selection_sort(ptr, 5);
}

運行結果


3
8
9
11
12

注意事項

  • selection_sort 會破壞原鏈表結構(刪除節點),排序後原鏈表不可用。
  • 內存分配未檢查 malloc 返回值。
  • concatenate 未在主函數中調用,僅作為演示函數存在。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved