用c语言写一个函数,要求传入链表头节点后,把链表中所有节点按该节点中的字符串的第一个字符在字母表顺序进行排序,要求大写字母在前小写字母在后,最后再返回这个链表的头节点
时间: 2023-04-06 18:03:33 浏览: 88
编写二个函数,其中一个函数func1完成功能为:接收字符串参数,返回一个元组,其中第一个元素为字符串中大写字母个数,
5星 · 资源好评率100%
好的,这个问题可以回答。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct Node {
char str[100];
struct Node *next;
} Node;
Node *sortList(Node *head) {
if (head == NULL || head->next == NULL) {
return head;
}
Node *p = head;
Node *q = head->next;
Node *h = NULL;
while (q != NULL) {
if (tolower(p->str[0]) > tolower(q->str[0]) || (tolower(p->str[0]) == tolower(q->str[0]) && p->str[0] > q->str[0])) {
p->next = q->next;
q->next = p;
if (p == head) {
head = q;
} else {
h->next = q;
}
h = q;
q = p->next;
} else {
h = p;
p = q;
q = q->next;
}
}
return head;
}
int main() {
Node *head = NULL;
Node *tail = NULL;
char str[100];
while (scanf("%s", str) == 1) {
Node *node = (Node *)malloc(sizeof(Node));
strcpy(node->str, str);
node->next = NULL;
if (head == NULL) {
head = node;
} else {
tail->next = node;
}
tail = node;
}
head = sortList(head);
Node *p = head;
while (p != NULL) {
printf("%s ", p->str);
p = p->next;
}
printf("\n");
return 0;
}
```
这个程序定义了一个链表节点结构体 `Node`,其中包含一个字符串 `str` 和一个指向下一个节点的指针 `next`。`sortList` 函数接受一个链表头节点指针 `head`,并返回排序后的链表头节点指针。
在 `sortList` 函数中,我们使用冒泡排序的思想,依次比较相邻的节点,如果它们的字符串需要交换位置,就交换它们的位置。具体来说,我们比较两个节点的字符串的第一个字符,如果第一个节点的字符在字母表顺序中排在第二个节点的字符之后,或者两个节点的字符相同但第一个节点的字符是大写字母而第二个节点的字符是小写字母,就交换它们的位置。最后返回排序后的链表头节点指针。
在 `main` 函数中,我们读入一些字符串,创建一个链表,并调用 `sortList` 函数对链表进行排序。最后输出排序后的链表中的字符串。
阅读全文