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

单链表的创建及排序

分数 5

作者 李卫明

单位 杭州电子科技大学

1.1编写程序,建立2个带头结点单链表,输入若干整数将正整数插入第1个单链表,将负整数插入第2个单链表,插入前和插入后单链表保持递增或相等次序,显示2个单链表,最后销毁。程序不可存在内存泄漏。

输入格式:

若干整数。

输出格式:

每行显示一个链表,元素间用分隔符->分隔;共两行

输入样例:

100 2 3 -2 -8 -6 -9 -10 50 2 -1

输出样例:

2->2->3->50->100
-10->-9->-8->-6->-2->-1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

C程序如下:

#include<stdio.h>    
#include<stdlib.h>    // 定义链表结构体  
typedef struct LinkList {    int Data;              // 节点数据  struct LinkList *Next; // 指向下一个节点的指针  
} LinkList, *List;    // 创建头节点的函数原型  
List  CreatHead();  
// 显示链表的函数原型  
void Display(List L);  
// 销毁链表的函数原型  
List Destroy(List L);  
// 反转链表的函数原型(但此函数在代码中并未实现)  
void Reverse(List L);  int main() {  // 定义两个链表的头尾指针  List firstHead, firstTail, secondHead, secondTail;  // 创建两个链表的头节点  firstHead = CreatHead();  firstTail = firstHead;  // 初始时,头尾指针指向同一个头节点  secondHead = CreatHead();  secondTail = secondHead; // 同上  int v;  // 循环读取输入,直到文件结束  while (scanf("%d", &v) != EOF) {  if (v > 0) {  // 如果输入为正数,则添加到第一个链表  List L = CreatHead();  // 创建一个新的头节点(实际上应该只创建节点,而不是头节点)  L->Data = v;  firstTail->Next = L;   // 将新节点添加到第一个链表的尾部  firstTail = L;         // 更新第一个链表的尾指针  }  else {  // 如果输入为负数,则添加到第二个链表  List L = CreatHead();  // 同上,这里应该只创建节点  L->Data = v;  secondTail->Next = L;  // 将新节点添加到第二个链表的尾部  secondTail = L;        // 更新第二个链表的尾指针  }  }  Sort(firstHead);  Sort(secondHead);  // 显示两个链表  Display(firstHead);  Display(secondHead);  // 销毁两个链表  Destroy(firstHead);  Destroy(secondHead);  return 0; // 返回0表示程序正常结束  
}  // 创建头节点的函数实现  
List CreatHead() {    List p = (List)malloc(sizeof(LinkList));  // 分配内存给新节点  if (p == NULL) {    exit(EXIT_FAILURE); // 如果分配失败,则退出程序  }    p->Next = NULL;  // 初始化新节点的Next指针为NULL  return p;  // 返回新节点的指针  
}    // 显示链表的函数实现  
void Display(List L) {  List p = L->Next;  // 从头节点的下一个节点开始遍历链表  while (p) {    printf("%d", p->Data);  // 打印当前节点的数据  p = p->Next;           // 移动到下一个节点  if (p) printf("->");   // 如果下一个节点存在,则打印"->"  }    printf("\n");  // 打印换行符  
}  // 销毁链表的函数实现  
List Destroy(List L) {    List p = L;    while (p->Next) {  // 循环直到最后一个节点(不包括头节点)  List q = p->Next;  // 临时保存下一个节点的指针  p->Next = q->Next; // 将当前节点的Next指针指向下一个节点的下一个节点,跳过下一个节点  free(q);          // 释放被跳过的节点的内存  }    free(p); // 释放头节点的内存(虽然这在实际中可能不是必须的,因为头节点可能已经在其他地方被释放了)  return NULL; // 销毁函数应该返回NULL,而不是L = NULL(这是无效的,因为L是传入函数的值的一个拷贝)  
}    void Sort(List L) {List pStar, pcur,pMin;pStar = L->Next;int temp;for (;pStar != NULL;pStar = pStar->Next) {pMin = pStar;for (pcur = pMin->Next;pcur != NULL; pcur = pcur->Next) {if (pcur->Data < pMin->Data) {pMin = pcur;}}if (pStar != pMin) {temp = pMin->Data;pMin->Data = pStar->Data;pStar->Data = temp;}}
}

相关文章:

  • 【Python】Redis数据库
  • SQL优化选对执行计划,查询速度提升1000倍 | OceanBase 应用实践
  • 长期保存红酒的挑战与应对策略
  • 【TensorFlow深度学习】使用TensorFlow实现双DQN与优先级经验回放
  • Git 代码管理规范 !
  • 9.4JavaEE——声明式事务管理(一)基于XML方式的声明式事务
  • 【Linux】Jenkins Pipeline流水线详解及基于Jenkins流水线实现自动更新项目(实战)
  • 云计算 | (四)基本云安全
  • uniapp小程序计算地图计算距离
  • 解析如何在vue3中使用Element-UI组件以及main.js文件
  • CSDN 自动上传图片并优化Markdown的图片显示
  • 1979python健身房管理系统mysql数据库Django框架VUE前端node运行计算机软件工程网页
  • Mac的m系列芯片安装虚拟机--简单流程
  • 用java 做一个模拟的菜单及对话框测试
  • JMU 数科 数据库与数据仓库期末总结(1)
  • [笔记] php常见简单功能及函数
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【Amaple教程】5. 插件
  • 08.Android之View事件问题
  • java 多线程基础, 我觉得还是有必要看看的
  • java多线程
  • JSDuck 与 AngularJS 融合技巧
  • Spring核心 Bean的高级装配
  • 测试开发系类之接口自动化测试
  • 从重复到重用
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 高性能JavaScript阅读简记(三)
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 数据仓库的几种建模方法
  • 思否第一天
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小试R空间处理新库sf
  • 协程
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​浅谈 Linux 中的 core dump 分析方法
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十六)一篇文章学会Java的常用API
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)LINQ之路
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .describe() python_Python-Win32com-Excel
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net core Redis 使用有序集合实现延迟队列
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net快速开发框架源码分享
  • @RestController注解的使用
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [BT]BUUCTF刷题第8天(3.26)