C语言实现单链表有序性判断:代码示例及解释
以下是用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
单链表无序
代码解析:
- 定义单链表结构体:
Node结构体包含数据域data和指向下一个结点的指针next。 - 创建单链表:
createLinkedList函数接收一个整数数组和数组长度,动态创建单链表,并返回链表头指针。 - 判断单链表是否有序:
isLinkedListSorted函数遍历链表,比较相邻结点的数据值,如果出现逆序情况,则返回 0,否则返回 1。 - 输出单链表:
printLinkedList函数遍历链表,输出每个结点的值。 - 主函数: 创建一个测试数据数组,调用
createLinkedList函数创建链表,调用isLinkedListSorted函数判断链表是否有序,并调用printLinkedList函数输出链表。
注意事项:
- 代码中使用
malloc函数进行动态内存分配,使用完后需要用free函数释放内存,避免内存泄漏。 - 代码中的
isLinkedListSorted函数只判断链表是否为升序,如果需要判断降序,可以修改比较逻辑。
希望以上代码和解释能够帮助您理解如何用C语言判断单链表是否有序。如果您有任何疑问,请随时提出!
原文地址: https://www.cveoy.top/t/topic/n33v 著作权归作者所有。请勿转载和采集!