欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > qlu数据结构测试

qlu数据结构测试

2025/2/25 18:58:35 来源:https://blog.csdn.net/yf743909/article/details/144483678  浏览:    关键词:qlu数据结构测试

12.15测试

编程题 

1、【问题描述】
已知非空线性链表第1个链结点指针为list,链结点构造为
struct node{
    datatype data;
    node *link;
};
请写一算法,将该链表中数据域值最大的那个点移到链表的最后面。(假设链表中数据域值最大的链结点惟一)(注意:要求先写出算法的解题思路,然后再写出算法)
【输入形式】
输入为一个整数序列,整数之间以空格隔开,序列以回车结尾。
【输出形式】
输出为移动后的整数序列,整数之间以空格隔开,序列以回车结尾。
【样例输入】
3 12 4 9 5 1
【样例输出】
3 4 9 5 1 12
【样例说明】
将序列中最大的数字12移动到序列最后。
【评分标准】
本题必须采用链表来实现移动操作,其他方法不得分。

#include <stdio.h>
#include <stdlib.h>// 定义链表节点结构体
typedef struct node {int data;struct node *link;
} Node;// 函数用于将链表中数据域最大的节点移到链表末尾
void moveMaxToEnd(Node **list) {if (*list == NULL) {return;}Node *maxPtr = *list;Node *prevMaxPtr = NULL;Node *curPtr = *list;Node *prevPtr = NULL;// 遍历链表找到最大值节点以及其前一个节点while (curPtr!= NULL) {if (curPtr->data > maxPtr->data) {maxPtr = curPtr;prevMaxPtr = prevPtr;}prevPtr = curPtr;curPtr = curPtr->link;}// 如果最大值节点就是头节点if (prevMaxPtr == NULL) {*list = (*list)->link;} else {prevMaxPtr->link = maxPtr->link;}// 找到链表尾节点curPtr = *list;while (curPtr->link!= NULL) {curPtr = curPtr->link;}curPtr->link = maxPtr;maxPtr->link = NULL;
}// 函数用于输出链表中的数据
void printList(Node *list) {Node *cur = list;while (cur!= NULL) {printf("%d ", cur->data);cur = cur->link;}printf("\n");
}int main() {Node *list = NULL;Node *tail = NULL;int num;while (scanf("%d", &num)!= EOF) {Node *newNode = (Node *)malloc(sizeof(Node));newNode->data = num;newNode->link = NULL;if (list == NULL) {list = newNode;tail = newNode;} else {tail->link = newNode;tail = newNode;}}// 清空输入缓冲区while (getchar()!= '\n' && getchar()!= EOF);moveMaxToEnd(&list);printList(list);// 释放链表内存Node *temp;while (list!= NULL) {temp = list;list = list->link;free(temp);}return 0;
}

2、

【问题描述】对于1n的所有自然数,计算0到n所有数字(0-9之间的数字)出现的次数分布。

【输入形式】一个整数n(n <= 100000)

【输出形式】10个数字,空格隔开,对应0-9数字在1..n这个序列中出现的次数总和。

【样例输入】

11

【样例输出】

1 4 1 1 1 1 1 1 1 1

【样例输入】

10000

【样例输出】

2893 4001 4000 4000 4000 4000 4000 4000 4000 4000

【评分标准】输出的10个数之间用空格区分。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* intToString(int num) {int len = 0;int temp = num;while (temp > 0) {len++;temp /= 10;}char* result = (char*)malloc((len + 1) * sizeof(char));if (result == NULL) {return NULL;}result[len] = '\0';  // 设置字符串结束符while (num > 0) {result[--len] = num % 10 + '0';num /= 10;}return result;
}int main() {int n;scanf("%d", &n);int count[10] = {0};  // 用于记录0-9每个数字出现的次数,初始化为0for (int i = 1; i <= n; i++) {char* numStr;if (i < 0) {numStr = (char*)malloc(2 * sizeof(char));  // 为负号和数字字符串预留空间if (numStr == NULL) {return 1;}numStr[0] = '-';i = -i;char* tempStr = intToString(i);if (tempStr == NULL) {free(numStr);return 1;}strcpy(numStr + 1, tempStr);  // 将转换后的数字字符串复制到负号后面free(tempStr);} else {numStr = intToString(i);if (numStr == NULL) {return 1;}}// 遍历字符串for (size_t j = 0; j < strlen(numStr); j++) {int digit = numStr[j] - '0';  // 将字符转换回数字count[digit]++;}free(numStr);  // 释放}for (int i = 0; i < 9; i++) {printf("%d ", count[i]);}printf("%d\n", count[9]);return 0;
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词