C语言代码:基于单链表的简单选择排序算法

以下是一个生成基于单链表的简单选择排序算法的 C 语言代码示例:

```c
#include
#include

// 定义链表节点
struct ListNode {
    int val;
    struct ListNode* next;
};

// 创建链表节点
struct ListNode* createNode(int val) {
    struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
    newNode->val = val;
    newNode->next = NULL;
    return newNode;
}

// 在链表末尾插入节点
void insertNode(struct ListNode** head, int val) {
    struct ListNode* newNode = createNode(val);
    if (*head == NULL) {
        *head = newNode;
    } else {
        struct ListNode* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}

// 交换链表节点的值
void swapValues(struct ListNode* node1, struct ListNode* node2) {
    int temp = node1->val;
    node1->val = node2->val;
    node2->val = temp;
}

// 使用简单选择排序算法对链表进行排序
void selectionSort(struct ListNode* head) {
    if (head == NULL || head->next == NULL) {
        return;  // 链表为空或只有一个节点,无需排序
    }

    struct ListNode* current = head;

    while (current != NULL) {
        struct ListNode* minNode = current;
        struct ListNode* nextNode = current->next;

        while (nextNode != NULL) {
            if (nextNode->val < minNode->val) {
                minNode = nextNode;
            }
            nextNode = nextNode->next;
        }

        if (minNode != current) {
            swapValues(current, minNode);
        }

        current = current->next;
    }
}

// 打印链表
void printList(struct ListNode* head) {
    struct ListNode* current = head;
    while (current != NULL) {
        printf("%d ", current->val);
        current = current->next;
    }
    printf("\n");
}

// 释放链表内存
void freeList(struct ListNode* head) {
    struct ListNode* current = head;
    while (current != NULL) {
        struct ListNode* temp = current;
        current = current->next;
        free(temp);
    }
}

int main() {
    struct ListNode* head = NULL;

    // 插入节点
    insertNode(&head, 5);
    insertNode(&head, 3);
    insertNode(&head, 8);
    insertNode(&head, 1);
    insertNode(&head, 6);

    printf("排序前的链表:");
    printList(head);

    // 使用简单选择排序算法对链表进行排序
    selectionSort(head);

    printf("排序后的链表:");
    printList(head);

    // 释放链表内存
    freeList(head);

    return 0;
}
```

这段代码定义了一个 `ListNode` 结构体表示链表节点,以及相应的创建节点、插入节点、交换节点值等函数。然后,我们定义了 `selectionSort` 函数,它使用简单选择排序算法对链表进行排序。

在 `main` 函数中,我们创建了一个链表,并插入了一些节点。然后,我们打印排序前的链表,调用 `selectionSort` 函数对链表进行排序,并打印排序后的链表。

请注意,这只是一个示例代码,你可以根据自己的需求进行修改和扩展。另外,为了完整性和正确性,请确保在使用完链表后释放其内存以避免内存泄漏。

#include 
#include 

// 定义链表节点
struct ListNode {
    int val;
    struct ListNode* next;
};

// 创建链表节点
struct ListNode* createNode(int val) {
    struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
    newNode->val = val;
    newNode->next = NULL;
    return newNode;
}

// 在链表末尾插入节点
void insertNode(struct ListNode** head, int val) {
    struct ListNode* newNode = createNode(val);
    if (*head == NULL) {
        *head = newNode;
    } else {
        struct ListNode* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}

// 交换链表节点的值
void swapValues(struct ListNode* node1, struct ListNode* node2) {
    int temp = node1->val;
    node1->val = node2->val;
    node2->val = temp;
}

// 使用简单选择排序算法对链表进行排序
void selectionSort(struct ListNode* head) {
    if (head == NULL || head->next == NULL) {
        return;  // 链表为空或只有一个节点,无需排序
    }

    struct ListNode* current = head;

    while (current != NULL) {
        struct ListNode* minNode = current;
        struct ListNode* nextNode = current->next;

        while (nextNode != NULL) {
            if (nextNode->val < minNode->val) {
                minNode = nextNode;
            }
            nextNode = nextNode->next;
        }

        if (minNode != current) {
            swapValues(current, minNode);
        }

        current = current->next;
    }
}

// 打印链表
void printList(struct ListNode* head) {
    struct ListNode* current = head;
    while (current != NULL) {
        printf("%d ", current->val);
        current = current->next;
    }
    printf("\n");
}

// 释放链表内存
void freeList(struct ListNode* head) {
    struct ListNode* current = head;
    while (current != NULL) {
        struct ListNode* temp = current;
        current = current->next;
        free(temp);
    }
}

int main() {
    struct ListNode* head = NULL;

    // 插入节点
    insertNode(&head, 5);
    insertNode(&head, 3);
    insertNode(&head, 8);
    insertNode(&head, 1);
    insertNode(&head, 6);

    printf("排序前的链表:");
    printList(head);

    // 使用简单选择排序算法对链表进行排序
    selectionSort(head);

    printf("排序后的链表:");
    printList(head);

    // 释放链表内存
    freeList(head);

    return 0;
}

你可能感兴趣的:(C语言数据结构,计算机二级-C语言,c语言,排序算法,开发语言)