关于单链表——数组

1.单链表统计负数个数

要求实现一个函数,返回带头结点的单链表中负整数的个数。

函数接口定义:

int NegativeInt(LinkList L);

L是带头结点的单链表的头指针,函数NegativeInt返回L中负整数的个数。如果单链表为空,返回0。

其中LinkList结构定义如下:

typedef int ElemType;

typedef struct LNode

{

    ElemType data;

    struct LNode *next;

}LNode,*LinkList;

输入格式输入数据为1行,给出以-1结束的单链表元素(-1不属于单链表元素),所有数据之间用空格分隔。

输出格式输出一个整数,表示负数个数

代码如下:

#include<stdio.h>
#include<stdlib.h>typedef int DataType; 
struct Node
{DataType      data; struct Node*  next;  
};
typedef struct Node* PNode;    
typedef struct Node* LinkList;   LinkList SetNullList_Link() 
{LinkList head = (LinkList)malloc(sizeof(struct Node));if (head != NULL) head->next = NULL;else printf("alloc failure");return head; 
}void CreateList_Tail(PNode head)
{PNode p = NULL;PNode q = head;DataType data;scanf("%d", &data);while (data != -1){   p = (struct Node*)malloc(sizeof(struct Node));p->data = data;p->next = NULL;q->next = p;q = p;scanf("%d", &data);}
}void print(LinkList head)   
{PNode  p = head->next;int i;while (p){if(p->data<0)//返回data的值 {i++;}p = p->next;//将next的值赋给p }printf("NegativeInt=%d ",i++);
}
void DestoryList_Link(LinkList head)  
{PNode  pre = head; PNode p = pre->next;while (p){free(pre);pre = p;p = pre->next;}free(pre);
}int main()
{LinkList head = NULL;head = SetNullList_Link();CreateList_Tail(head);/*To Do List*/print(head);DestoryList_Link(head);return 0;
}

2.移动链表中的最大值到尾部

编写函数MoveMaxToTail(),实现查找单链表中值最大的结点,并将其移动到链表尾部,注意其他结点的相对次序不变。要求尽量具有较高的时间效率。

函数接口定义:

void MoveMaxToTail (LinkList H );

typedef int DataType;

struct Node

{

    DataType      data;

    struct Node*  next;  

};

typedef struct Node  *PNode;    

typedef struct Node  *LinkList;   

输入格式8 12 46 30 5

输出格式8 12 30 5 46

代码如下:

#include<stdio.h>
#include<stdlib.h>typedef int DataType; 
struct Node
{DataType      data; struct Node*  next;  
};
typedef struct Node* PNode;    
typedef struct Node* LinkList;   LinkList SetNullList_Link() 
{LinkList head = (LinkList)malloc(sizeof(struct Node));if (head != NULL) head->next = NULL;else printf("alloc failure");return head; 
}void CreateList_Tail(PNode head)
{PNode p = NULL;PNode q = head;DataType data;scanf("%d", &data);while (data != -1){   p = (struct Node*)malloc(sizeof(struct Node));p->data = data;p->next = NULL;q->next = p;q = p;scanf("%d", &data);}
}void MoveMaxToTail(LinkList head)
{LinkList s = head; // 当前节点的前一个节点指针LinkList p = head->next; // 当前节点指针/定义两个指针p,s LinkList max = p; // 最大值节点指针LinkList maxPrev = head; // 最大值节点的前一个节点指针// 用于保存 ,找到最大值节点和其前一个节点while (p != NULL){if (max->data < p->data){max = p;//最大节点 maxPrev = s;//最大节点前驱 }s = p;//更新前驱节点 p = p->next;}// 如果最大值节点已经在链表尾部,则无需移动if (max->next == NULL){return;}// 将最大值节点从链表中删除maxPrev->next = max->next;// 将最大值节点移动到链表尾部p = head;while (p->next != NULL){p = p->next;}p->next = max;//max节点添加 max->next = NULL;
}void print(LinkList head)   
{PNode  p = head->next;while (p){printf("%d ", p->data);p = p->next;}
}
void DestoryList_Link(LinkList head)  
{PNode  pre = head; PNode p = pre->next;while (p){free(pre);pre = p;p = pre->next;}free(pre);
}int main()
{LinkList head = NULL;head = SetNullList_Link();CreateList_Tail(head);MoveMaxToTail( head);//实现查找单链表中值最大的结点,并将其移动到链表尾部,注意其他结点的相对次序不变/*To Do List*/print(head);DestoryList_Link(head);return 0;
}

3.删除单链表的重复结点

实现一个函数,pur_LinkList(LinkList L)函数是删除带头结点单链表的重复结点。

函数接口定义:

void  pur_LinkList(LinkList L);

其中L是用户传入的参数。L是带头结点单链表的头指针。

typedef int datatype;

typedef struct node

{

    datatype data;

    struct node *next;

}LNode, *LinkList;

输入格式1 2 3 3 3 4 5 6 7 8 -1

输出格式1     2     3     4     5     6     7     8

代码如下:

#include<stdio.h>
#include<stdlib.h>typedef int DataType; 
struct Node
{DataType      data; struct Node*  next;  
};
typedef struct Node* PNode;    
typedef struct Node* LinkList;   LinkList SetNullList_Link() 
{LinkList head = (LinkList)malloc(sizeof(struct Node));if (head != NULL) head->next = NULL;else printf("alloc failure");return head; 
}void CreateList_Tail(PNode head)
{PNode p = NULL;PNode q = head;DataType data;scanf("%d", &data);while (data != -1){   p = (struct Node*)malloc(sizeof(struct Node));p->data = data;p->next = NULL;q->next = p;q = p;scanf("%d", &data);}
}void pur_LinkList(LinkList L)
{LinkList p = L->next; // p为当前节点LinkList q = L; // q为p的前驱节点LinkList x;  while (p != NULL){q = p;x = q->next;while (x != NULL){if(x->data == p->data){q->next = x->next;}else{q = q->next;}x = x->next;}p =p->next;}
}void print(LinkList head)   
{PNode  p = head->next;while (p){printf("%d ", p->data);p = p->next;}
}
void DestoryList_Link(LinkList head)  
{PNode  pre = head; PNode p = pre->next;while (p){free(pre);pre = p;p = pre->next;}free(pre);
}int main()
{LinkList head = NULL;head = SetNullList_Link();CreateList_Tail(head);pur_LinkList(head);/*To Do List*/print(head);DestoryList_Link(head);return 0;
}

4.链表合并

有两个单链表A、B,其中元素递增有序,本题要求实现一个函数merge(LinkList A, LinkList B),将A、B归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。

函数接口定义:

LinkList merge(LinkList A, LinkList B);

其中 A 和 B 都是用户传入的参数。 A 是单链表A的头指针; B 是单链表B的头指针。函数须返回单链表C的头指针。

typedef int datatype;

typedef struct node

{

    datatype data;

    struct node *next;

}LNode, *LinkList;

输入格式1 3 5 7 9 -1

              2 4 6 8 8 10 -1

输出格式10   9     8     8     7     6     5     4     3    2   1

代码如下:

#include<stdio.h>
#include<stdlib.h>typedef int DataType; 
struct Node
{DataType      data; struct Node*  next;  
};
typedef struct Node* PNode;    
typedef struct Node* LinkList;   LinkList SetNullList_Link() 
{LinkList head = (LinkList)malloc(sizeof(struct Node));if (head != NULL) head->next = NULL;else printf("alloc failure");return head; 
}void CreateList_Tail(PNode head)
{PNode p = NULL;PNode q = head;DataType data;scanf("%d", &data);while (data != -1){   p = (struct Node*)malloc(sizeof(struct Node));p->data = data;p->next = NULL;q->next = p;q = p;scanf("%d", &data);}
}void merge(LinkList A, LinkList B)
{LinkList C;PNode p,q,s;p = A->next;q = B->next;C = A;//C表的头结点C->next = NULL;while ( p && q ){if ( p->data < q->data ){s = p;p = p->next;}else {s = q;q = q->next;}//从原AB表中取出较小者s->next = C->next;//插入到 C表的头部C->next = s;}if ( p==NULL ) p=q;while(p)//将剩余的结点一个个取出 ,插入到 C表的头部{s = p;p = p->next;s->next = C->next;C->next = s;    }
}void print(LinkList head)   
{PNode  p = head->next;while (p){printf("%d ", p->data);p = p->next;}
}void DestoryList_Link(LinkList head)  
{PNode  pre = head; PNode p = pre->next;while (p){free(pre);pre = p;p = pre->next;}free(pre);
}int main()
{LinkList A = NULL;LinkList B = NULL;LinkList C = NULL;A = SetNullList_Link();CreateList_Tail(A);B = SetNullList_Link();CreateList_Tail(B);// MoveMaxToTail(LinkList L);/*To Do List*/merge(A,B);//MoveMaxToTail(C);print(A);DestoryList_Link(C);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小熊家务帮day5-day7 客户管理模块1 (小程序认证,手机验证码认证,账号密码认证,修改密码,找回密码等)

客户管理模块 1.认证模块1.1 认证方式介绍1.1.1 小程序认证1.1.2 手机验证码登录1.1.3 账号密码认证 1.2 小程序认证1.2.1 小程序申请1.2.2 创建客户后端工程jzo2o-customer1.2.3 开发部署前端1.2.4 小程序认证流程1.2.4.1 customer小程序认证接口设计Controller层Service层调用…

【人工智能】第一部分:ChatGPT的基本概念和技术背景

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

STM32作业实现(八)触摸按键TPAD

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

26 _ 虚拟DOM:虚拟DOM和实际的DOM有何不同?

虚拟DOM是最近非常火的技术&#xff0c;两大著名前端框架React和Vue都使用了虚拟DOM&#xff0c;所以我觉得非常有必要结合浏览器的工作机制对虚拟DOM进行一次分析。当然了&#xff0c;React和Vue框架本身所蕴含的知识点非常多&#xff0c;而且也不是我们专栏的重点&#xff0c…

VBA字典与数组第十五讲:多行多列数组与同列数单行数组间的运算规则

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

LabVIEW齿轮调制故障检测系统

LabVIEW齿轮调制故障检测系统 概述 开发了一种基于LabVIEW平台的齿轮调制故障检测系统&#xff0c;实现齿轮在恶劣工作条件下的故障振动信号的实时在线检测。系统利用LabVIEW的强大图形编程能力&#xff0c;结合Hilbert包络解调技术&#xff0c;对齿轮的振动信号进行精确分析…

高考后的赚钱新路径:千行赏金助你开启财富之旅

一、兼职背景与需求 随着高考的落幕&#xff0c;众多学子迎来了人生中的一大转折点。在迈向大学校园的门槛之前&#xff0c;许多学生希望利用这段空闲时间做些兼职&#xff0c;既能够充实自己的暑假生活&#xff0c;又能为家庭减轻经济负担&#xff0c;甚至为自己积累一些宝贵…

基于django | 创建app,并启动django

1、删除系统默认的目录路径&#xff1a;BASE_DIR / templetes 2、在终端输入命令&#xff1a; python manage.py startapp app01 # 这里的app01是我创建app的名称 3、如果没有创建成功&#xff0c;手动点击 Creat App , 4、在 setting.py 中找到 INSTALLED_APPS ,添加 ap…

pycharm简易使用码云gitee

文章目录 参考文献官网地址安装插件第一个选项报错了不可&#xff0c;第二个选项&#xff0c;可以了新库上传到主分支&#xff0c;push改进实验新建分支&#xff0c;上传为新分支&#xff1a;做另一种改进&#xff0c;选择回退主分支&#xff0c;另建一个分支 使用对于一个新项…

非线性系统:相平面法

非线性系统&#xff1a;相平面法 非线性系统的相平面法是一种重要的分析工具&#xff0c;用于研究系统的动力学行为。通过相平面法&#xff0c;可以直观地观察系统状态变量的变化&#xff0c;分析系统的稳定性、周期性和其他动力学特性。本文将详细介绍相平面法的基本思想、步…

[NOIP2015 提高组] 子串

题目背景 NOIP2015 Day2T2 题目描述 有两个仅包含小写英文字母的字符串 A A A 和 B B B。 现在要从字符串 A A A 中取出 k k k 个互不重叠的非空子串&#xff0c;然后把这 k k k 个子串按照其在字符串 A A A 中出现的顺序依次连接起来得到一个新的字符串。请问有多少…

Tree——输出项目的文件结构(Linux)

输出项目中的文件结构可以使用tree命令。tree是一个用于以树状结构显示目录内容的命令行工具。它非常适合快速查看项目的文件结构。安装&#xff1a; sudo apt-get install tree 使用&#xff1a; 在命令行中导航到项目的根目录&#xff0c;输出文件结构。 tree 也可以将结构输…

【30天精通Prometheus:一站式监控实战指南】第13天:graphite_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…

Vue3中的常见组件通信之props和自定义事件

Vue3中的常见组件通信 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs4. 默认…

Python课设-学生信息管理系统

一、效果展示图 二、前端代码 1、HTML代码 <1>index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

安卓模拟鼠标,绘图板操作电脑PC端,卡卡罗特也说好,儿童节快乐

家人们&#xff0c;上链接了&#xff1a;https://download.csdn.net/download/jasonhongcn/89387887

B站如何屏蔽短视频:成都鼎茂宏升文化传媒公司

B站如何屏蔽短视频&#xff1a;优化你的观看体验 在当今数字化时代&#xff0c;B站&#xff08;哔哩哔哩&#xff09;作为国内领先的弹幕视频网站&#xff0c;以其丰富的视频资源和独特的弹幕文化吸引了大量用户。然而&#xff0c;随着短视频的兴起&#xff0c;B站也引入了短视…

intel深度相机D455的使用

一、D455介绍 Intel RealSense D455 是RealSense D400系列的一部分&#xff0c;这个系列的设备以其高精度和可靠性而闻名。D455相比于之前的型号&#xff08;如D415和D435&#xff09;&#xff0c;提供了更远的感知范围和更高的精度。 二、使用代码 我们先定义一下相关的函数…

鸿蒙OS初识

学习官网&#xff1a;https://www.harmonyos.com/cn/develop 准备 注册&#xff0c;安装软件&#xff08;node:12, DevEco Studio&#xff09;&#xff1a; https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415#ZH-CN_TOP…

MFC3d立体按钮制作

1、本程序基于前期我的博客文章MFC用CButtonST类实现图片透明按钮(免费源码下载) 2、添加CeXDib.cpp CeXDib.h ShadeButtonST.cpp ShadeButtonST.h到项目文件夹下&#xff0c;和FileView中如图。 3、在ButtonShadeDlg.h中添加代码 #include "ShadeButtonST.h" #in…