以下是用C语言实现判断一个单链表中各个结点值是否有序的代码,包含输入和输出:

#include <stdio.h>
#include <stdlib.h>

// 定义单链表结构体
typedef struct Node {
    int data;
    struct Node *next;
} Node, *LinkedList;

// 创建单链表
LinkedList createLinkedList(int arr[], int n) {
    LinkedList head = (LinkedList)malloc(sizeof(Node));
    head->next = NULL;
    Node *p;
    for (int i = 0; i < n; i++) {
        p = (Node *)malloc(sizeof(Node));
        p->data = arr[i];
        p->next = head->next;
        head->next = p;
    }
    return head;
}

// 判断单链表是否有序
int isLinkedListSorted(LinkedList head) {
    Node *p = head->next;
    if (p == NULL || p->next == NULL) {
        return 1;
    }
    int flag = 1;
    while (p->next != NULL) {
        if (p->data > p->next->data) {
            flag = 0;
            break;
        }
        p = p->next;
    }
    return flag;
}

// 输出单链表
void printLinkedList(LinkedList head) {
    Node *p = head->next;
    while (p != NULL) {
        printf('%d ', p->data);
        p = p->next;
    }
    printf('
');
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    LinkedList head = createLinkedList(arr, n);
    printf('原始单链表:');
    printLinkedList(head);
    if (isLinkedListSorted(head)) {
        printf('单链表有序
');
    } else {
        printf('单链表无序
');
    }
    return 0;
}

运行结果:

原始单链表:5 4 3 2 1 
单链表无序

代码解析:

  1. 定义单链表结构体: Node 结构体包含数据域 data 和指向下一个结点的指针 next
  2. 创建单链表: createLinkedList 函数接收一个整数数组和数组长度,动态创建单链表,并返回链表头指针。
  3. 判断单链表是否有序: isLinkedListSorted 函数遍历链表,比较相邻结点的数据值,如果出现逆序情况,则返回 0,否则返回 1。
  4. 输出单链表: printLinkedList 函数遍历链表,输出每个结点的值。
  5. 主函数: 创建一个测试数据数组,调用 createLinkedList 函数创建链表,调用 isLinkedListSorted 函数判断链表是否有序,并调用 printLinkedList 函数输出链表。

注意事项:

  • 代码中使用 malloc 函数进行动态内存分配,使用完后需要用 free 函数释放内存,避免内存泄漏。
  • 代码中的 isLinkedListSorted 函数只判断链表是否为升序,如果需要判断降序,可以修改比较逻辑。

希望以上代码和解释能够帮助您理解如何用C语言判断单链表是否有序。如果您有任何疑问,请随时提出!

C语言实现单链表有序性判断:代码示例及解释

原文地址: https://www.cveoy.top/t/topic/n33v 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录