当前位置: 首页 > news >正文

习题1.9 有序数组的插入

习题1.9 有序数组的插入

分数 20

作者 陈越

单位 浙江大学

本题要求将任一给定元素插入从大到小排好序的数组中合适的位置,以保持结果依然有序。

L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较,并且题目保证传入的数据是递减有序的。函数Insert要将X插入Data[]中合适的位置,以保持结果依然有序(注意:元素从下标0开始存储)。但如果X已经在Data[]中了,就不要插入,返回失败的标记false;如果插入成功,则返回true。另外,因为Data[]中最多只能存MAXSIZE个元素,所以如果插入新元素之前已经满了,也不要插入,而是返回失败的标记false

输入样例1:

5

35 12 8 7 3

10

输出样例1:

35 12 10 8 7 3

Last = 5

输入样例2:

6

35 12 10 8 7 3

8

输出样例2:

Insertion failed.

35 12 10 8 7 3

Last = 5

#include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 typedef enum { false, true } bool; typedef int ElementType; typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */ }; List ReadInput() /* 裁判实现,细节不表。元素从下标0开始存储 */ { List L = (List)malloc(sizeof(struct LNode)); int n; scanf("%d", &n); L->Last = n - 1; // 元素从下标0开始存储 for (int i = 0; i < n; i++) { scanf("%d", &L->Data[i]); } return L; } void PrintList(List L) /* 裁判实现,细节不表 */ { for (int i = 0; i <= L->Last; i++) { printf("%d", L->Data[i]); if (i < L->Last) printf(" "); } printf("\n"); printf("Last = %d\n", L->Last); } bool Insert(List L, ElementType X) { int n = L->Last; if (n == MAXSIZE - 1) //表满? return false; for (int i = 0; i <= n; i++) //重复? { if (L->Data[i] == X) { return false; break; } } int pos; // X的位置 for (pos = 0; pos <= n; pos++) { if (L->Data[pos] < X) //找到第一个比X小的数,插入这个数的前边,X的位置就是这个数的位置 break; } for (int i = n; i >= pos; i--) //后移,n的位置上是空的,直接覆盖就行,后序也是直接覆盖 L->Data[i + 1] = L->Data[i]; L->Data[pos] = X; //插入X /* L->Data[n + 1] = X; for (int i = 0; i < n + 1; i++)//冒泡排序,时间复杂度高,不用 { for (int j = 0; j < n - i + 1; j++) { if (L->Data[j] < L->Data[j + 1]) { int temp = L->Data[j]; L->Data[j] = L->Data[j + 1]; L->Data[j + 1] = temp; } } }*/ L->Last++; } int main() { List L; //下标从0开始 ElementType X; //要插入的新元素 L = ReadInput(); scanf("%d", &X); if (Insert(L, X) == false) printf("Insertion failed.\n"); PrintList(L); return 0; } /* 你的代码将被嵌在这里 */
http://www.jsqmd.com/news/475941/

相关文章:

  • QT布局实战:如何避免控件大小被自动调整(附完整代码示例)
  • 横评后发现! 降AI率网站 千笔·降AI率助手 VS speedai 专科生首选
  • YOLOv12优化:AAAI2026 | 融合PartialNet Block的C3k2-YOLO高效目标检测网络 | 轻量化涨点设计
  • 深入解读OpenClaw配置文件:一个现代化AI网关的全景洞察
  • NER标注指南:BIO、BMES、BIOSE三种标签体系如何选择?优缺点对比
  • TestCraft的AI测试想法生成功能详解:如何用AI提升你的测试覆盖率
  • 基于 C# + Keil uvsock 的实时变量数组可视化工具
  • PTA 树与二叉树 1 二叉链树的创建与遍历
  • Funkey-D1s:基于全志D1s/T113-S3的RGB与MIPI双模嵌入式显示系统设计
  • 科研党必备:Mulimg Viewer 一键生成SCI论文对比图的保姆级教程
  • 赶deadline必备! 降AIGC软件 千笔·降AIGC助手 VS 知文AI,专科生专属神器!
  • 【文献阅读】PPLM——让语言模型真正“理解“蛋白质之间的对话
  • 【开源APPs】Github开源应用集锦
  • 导师严选!最强的降AI率软件 —— 千笔·降AI率助手
  • 目标:4月大厂暑假实习投递第二轮
  • 医生也能懂的ConDSeg指南:如何用AI精准分割息肉/腺体?
  • TA-Lib MACD实战避坑指南:Python金融分析中常见的5个参数设置错误
  • STM32F411 USB声卡实战:从噪音消除到中文名自定义全攻略
  • 手把手教你用Proteus 8 Professional搭建仿真电路:从原理图到仪表调试
  • 控制理论前置知识——卷积
  • 权重衰减参数的工作原理,以及对训练的影响
  • 阿里小云KWS模型与语音合成系统的无缝集成
  • 最小堆模拟
  • 2026别错过!AI论文写作软件 千笔·专业论文写作工具 VS 锐智 AI,专科生专属神器!
  • 两会热议AI安全:从被动防御到主动智能协同
  • MusePublic惊艳案例展示:看AI如何画出故事感时尚人像
  • Kettle8.2过滤记录组件实战:如何用Excel输出实现数据分流(附完整配置截图)
  • Qwen3-0.6B-FP8模型应用:Dify平台集成实战指南
  • 基于 YOLOv11 的智能化遥感图像目标检测
  • 具身智能实战:如何用AIBOX打造你的第一个无人化智能体(附避坑指南)