C++链表的建立,排序,删除

2023-11-02

描述:使用随机数建立链表节点,节点的结构很简单,就是一个整形数(随机数)和一个指针,有三个函数,第一个函数建立链表,第二个函数对链表进行排序,第三个函数将链表中所有有重复数字的节点删除,只留只出现过一次的节点。

输入:链表的节点数

输出:

1.建立的链表

2.排序后的链表

3.删除后的链表

#include<iostream>
#include<stdlib.h>
#include<time.h>
#define random(x) (rand()%x)
using namespace std;
struct numst//定义结构体变量
{
	int num;
	numst *next;
};
numst *head=NULL;//定义头指针,并置空
numst *creat()//定义函数。用来创建范围为0~9的链表,由用户设定链表节点个数
{
	numst *p=NULL;
	numst *q=NULL;//定义两个结构体指针变量,用来作为循环迭代中间量
	int sum;
	cout<<"input the sum of nodes:";
	cin>>sum;//由用户输入节点个数
	while(sum)//while循环num次,产生num个链表节点
	{
		p=new numst;
		p->num=random(10);//将产生的随机数赋给新产生的结构体中的变量
		if(head==NULL)//如果头指针为空,则把第一个节点设为头节点
			head=p;
		else
			q->next=p;//否则将p指向q的下一个节点
		q=p;//另q保持为最末尾的节点
		sum--;
	}
	if(head!=NULL)
		q->next=NULL;//将最后一个节点的指针指向空
	numst *begin=head;
	while(begin!=NULL)
	{
		cout<<begin->num<<" ";
		begin=begin->next;
	}//输出生成的链表
	cout<<endl;
	return(head);//函数返回头指针

}
numst *seq(numst *head)//定义函数将随机数链表进行排序
{
	int sum=0,mid;//定义节点总数num,和冒泡法排序的中间量mid
	numst *temp=head;//定义节点数统计指针
	numst * m=head;
	numst * n;//定义冒泡法指针
	while(temp!=NULL)
	{
		sum++;
		temp=temp->next;
	}//统计节点数
	for(int i=0;i<sum;i++)
	{
		n=m->next;//总是保持n指向m的下一个节点
		for(int j=i+1;j<sum;j++)
		{
			if(m->num>n->num)
			{
				mid=m->num;
				m->num=n->num;
				n->num=mid;
			}
			n=n->next;//让m和m以后的所有节点比较

		}
		m=m->next;//m指向下一个节点
	}

		numst *begin=head;
	while(begin!=NULL)
	{
		cout<<begin->num<<" ";
		begin=begin->next;
	}
	cout<<endl;//输出排序后的指针

	return (head);
}
 numst *deletes(numst *head)//定义函数将所有的有数字重复的节点删除
{
	numst *a=head;//定义外层循环的指针a,b是连续的两个指针b在a的后面,每次循环,
	numst *b=a->next;//b就和a比较,如果相同,则将值赋给mark,进行内层循环的删除工作;
	numst *start=head;//定义内层循环的指针,former总是指向start的前一个节点;
	numst *former=NULL;
	int mark;//标记相等的节点的值
	while(b!=NULL)//外层循环,此处不能设为b->next!=NULL,因为会导致最后两个相等的节点不能删除,
	{				//因为最后一个节点的指针指向NULL,所以导致最后这个节点的循环被跳过
		
		if(b->num==a->num)
		{
			mark=a->num;
			while(start!=NULL)
			{
				if((start==head)&&(start->num==mark))//情况一:要删除的是头节点
				{
					if(start->next==NULL)
					{
						cout<<"all deleted"<<endl;
						return(NULL);//如果所有的节点都被删除,则返回NULL;
					}
					head=start->next;//head指向头节点的下一个
					delete start;//删除头节点
					a=head;//由于头节点被删除所以有可能外层循环的a,b指向的节点已被删除,
					b=a->next;//所以重新将a指向头节点
					start=head;//对比的起始点也重置为头节点
				}
				else if(start->num==mark)//第二种情况:不是头节点
				{
					former->next=start->next;
					delete start;//如果符合情况,则删除本节点
					start=former->next;//将start重新指向former的下一个节点
					b=former;//更新b,将外层循环的b设为former,说明外层循环从former开始,以免b的指向丢失
				}
				else//第三种情况:节点不等于mark,则向前推进
				{
					former=start;
					start=start->next;
				}
				
			}
			start=head;//为了测试下一个mark,必须将对比的起始点在此重置为头节点
		}
		else
		{
		a=b;
		b=b->next;//如果不是头节点,继续向后推进,寻找相同节点
		}
	}
	numst *begin=head;
	while(begin!=NULL)
	{
		cout<<begin->num<<" ";
		begin=begin->next;
	}
	cout<<endl;//输出删除后的链表
}
int main()
{
	srand((int)time(0));//设置随机数种子
	deletes(seq(creat()));//调用函数
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++链表的建立,排序,删除 的相关文章

  • C++,多语言/本地化支持

    向 C 程序添加多语言支持的最佳方法是什么 如果可能 应该从包含键值对 WelcomeMessage Hello s 之类的纯文本文件中读取语言 我想到了添加一个 localizedString key 函数来返回加载的语言文件的字符串 有
  • fork 和 exec 之间的区别

    两者有什么区别fork and exec 指某东西的用途fork and exec它体现了 UNIX 的精神 它提供了一种非常简单的方法来启动新进程 The fork调用基本上复制了当前进程 在almost任何方式 并非所有内容都会被复制
  • 氧图。如何将轴旁边的值格式从 1000 更改为 1k

    我正在尝试更改轴旁边的值的格式 例如从 1000 更改为 1k 或 1000000 更改为 1M 这在 LinearAxis 中可能吗 这是我的代码 m Axes Add new LinearAxis Position AxisPositi
  • 运行 C# exe 文件

    复制 为什么我的 NET 应用程序在从网络驱动器运行时会崩溃 https stackoverflow com questions 148879 why does my net application crash when run from
  • Visual Studio 2013 Intellisense 不会将枚举类型放在方法参数的位置

    例如 我有以下代码 namespace VS2013 EnumTypes class Program enum SomeEnum One Two static void SomeMethod SomeEnum someEnum some c
  • 如何通过C#在SQLite数据库中写入变量DateTime值?

    我很新C and SQLite数据库并有一些变量存储在 SQLite 数据库中TimeStamp 这是我的代码 DateTime now DateTime Now m dbConnection new SQLiteConnection Da
  • .NET Core 2 - 从启动中调用存储库方法[重复]

    这个问题在这里已经有答案了 我有以下存储库和类 public interface IValueService GetAll public class ValueService IValueService private DataContex
  • 泛型类上的 DebuggerDisplay

    我在应用时遇到问题DebuggerDisplay泛型类的属性 DebuggerDisplay foo class Foo DebuggerDisplay Bar t class Bar
  • dlopen 或 dlclose 未调用信号处理程序

    我在随机时间内收到分段错误 我注册了信号 但发生分段错误时未调用信号处理程序 include
  • 二元运算符重载、隐式类型转换

    class my bool private bool value public my bool bool value value value explicit operator bool return value friend my boo
  • 模板“内联”函数的静态局部变量[重复]

    这个问题在这里已经有答案了 static的局部变量inline如果我的理解是正确的 C 中的函数保证像单个全局变量一样存在 如果inline函数是一个模板 编译器可以在哪里生成该函数的多个版本 下面这篇文章应该很好地回答你的问题 http
  • 谷歌基准迭代的意义是什么?

    我正在使用 Google Benchmark 来测量某些代码的执行时间 例如 我编写了以下代码来测量其执行时间性能 include
  • 访问结构向量

    我有一个结构 struct OutputStore int myINT string mySTRING 如果我创建一个 OutputStore 类型的数组 如下所示 OutputStore OutputFileData new Output
  • 如何在 .NET 中自定义 JSON 枚举的反序列化?

    我有以下示例 C 代码 它是使用 svcutil exe 应用程序从 xsd 自动生成的 DataContract public enum Foo EnumMember Value bar Bar 1 EnumMember Value ba
  • C++头文件问题

    我在处理类时尝试了一些 C 代码 这个问题出现在我身上 并且让我有点烦恼 我创建了一个包含类定义的头文件和一个包含实现的 cpp 文件 如果我在不同的 cpp 文件中使用此类 为什么要包含头文件而不是包含类实现的 cpp 文件 如果我包含类
  • 将纬度/经度转换为 X/Y,以便在美国地图图像上进行阿尔伯斯投影

    我正在尝试使用 C 或 Javascript 将纬度 经度转换为 X Y 坐标 以将带有 CSS 的 div 左 上 定位到美国地图的背景图像上 美国的标准地图投影是阿尔伯斯投影 如下所示 但 StackOverflow 仅提供参考基本墨卡
  • 使用 System.Json 迭代 JSON

    我正在探索 NET 4 5 的功能System Json库 但没有太多文档 而且由于流行的 JSON NET 库 搜索起来相当棘手 我基本上想知道 我如何循环一些 JSON 例如 People Simon Age 25 Steve Age
  • 定义一个断言,即使定义了 NDEBUG,该断言也有效

    我想定义一个assert与标准相同的宏assert 3 http man7 org linux man pages man3 assert 3 html调用 但它不会被预处理器删除NDEBUG被定义为 这样的呼唤 让我们称之为assert2
  • 恐怖分子已弃用

    正在接听另一个问题 https stackoverflow com q 11830514 1468366 我偶然发现了man page http linux die net man 3 herror一个名为的函数herror 看起来很像pe
  • 返回右值 - 这段代码有什么问题? [复制]

    这个问题在这里已经有答案了 我遇到了以下代码片段 std string test std string m Hello return std move m int main std string m test 我知道上面的代码是不正确且不安

随机推荐

  • Vmware16 下载与安装

    Vmware16 下载与安装 vmware16 密钥 ZF3R0 FHED2 M80TY 8QYGC NPKYF YF390 0HF8P M81RQ 2DXQE M2UT6 ZF71R DMX85 08DQY 8YMNC PPHV8 Vmw
  • tshark解析本地pcap数据包提取五元组{src_ip,src_port,proto,dst_ip,dst_port}与时间戳,包长

    tshark官方文档 https www wireshark org docs man pages tshark html wireshark官方特征参考 https www wireshark org docs dfref 前提需要安装w
  • 利用递归求斐波那契数列

    斐波那契额是二级递推数列 从第三项起 每项为前两项的和 利用函数的递归可以很好实现 只需每次返回n 1 和 n 2 即可 上代码 define CRT SECURE NO WARNINGS 1 include
  • C#使用多线程并发之异步委托

    阻塞式编程 我们一边编写的代码都是同步代码 也就是从上到下按照顺序执行 例如 public delegate void DoWorkHandler class Program static void Main string args Con
  • vsflexgrid单元格换行后自动使用行高_大咖分享办公秘籍:Word和Excel换行

    我们在日常办公和学习中 对文档进行整理和粘贴数据的过程中 经常会用到的就是换行功能了 那么怎么实现自动换行呢 下面 就由非凡学院商务办公培训专业的付老师 和大家分享一下在Word和Excel中简单的实现过程 赶紧来看看和学习一下吧 1 硬回
  • 虚拟机网络配置、防火墙、克隆

    一 修改虚拟机的网络配置 在虚拟机开启的情况下配置 选中虚拟机hadoop100 编辑 虚拟网络编辑器 更改设置 NAT模式 NAT设置 网关改为192 168 1 2 连点两次确定 二 修改windows的网络配置 1 点击电脑右下角的网
  • 华为OD机试 - 靠谱的车 - 逻辑分析(Java 2023 B卷 100分)

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 专栏导读 本专栏收录于 华为OD机试 JAVA
  • DBeaver报Public Key Retrieval is not allowed 错误

    解决方法 1 选择报错的链接 按F4 出现编辑链接弹窗 切换到驱动属性标签页 2 修改allowPublicKeyRetrieval属性的值为TRUE 3 重启DBeaber
  • Git+TortoiseGit详细安装教程(HTTP方式)

    Git是核心 TortoiseGit是个外壳 git需要使用命令行 可以简单理解为TortoiseGit是git的GUI展现形式 使用TortoiseGit操作 就不用记住git命令了 Git可以使用HTTP和SSH方式 HTTP方式配置更
  • 素数筛

    素数又称质数 是指除了1和它本身 再也没有其他的因子 合数是除了1和它本身以外 还有其他的因子 1既不是素数也不是合数 此题为洛谷上的一道题 以此题为例题 讲解素数筛 埃氏筛法 时间复杂度O nlogn 得分 80 include
  • html比较字符数字大小,JavaScript怎么比较字符串?

    javascript怎么比较字符串 下面本篇文章就来给大家介绍使用javascript比较字符串的几种方法 希望对大家有所帮助 一 大于 gt 小于 javascript字符串在进行大于 小于 比较时 会根据第一个不同的字符的ascii值码
  • 预训练模型、迁移学习

    预训练模型把迁移学习很好地用起来了 让我们感到眼前一亮 这和小孩子读书一样 一开始语文 数学 化学都学 读书 网上游戏等 在脑子里积攒了很多 当他学习计算机时 实际上把他以前学到的所有知识都带进去了 如果他以前没上过中学 没上过小学 突然学
  • linux 查看文件个数

    要查看 Linux 系统中某个目录下的文件数量 可以使用 ls 命令结合管道和 wc 命令来完成 具体来说 可以使用 ls 命令的 l 参数来列出目录中的文件和子目录的详细信息 然后将输出结果通过管道 传递给 wc 命令 使用 l 参数来统
  • sort()函数与qsort()函数及其头文件

    sort 函数是C 中的排序函数其头文件为 include
  • vscode路径别名文件跳转解决办法

    第一步 下载 1 在jsconfig json中配置 compilerOptions target es5 module esnext baseUrl moduleResolution node paths src lib esnext d
  • Code Llama: Open Foundation Models for Code

    Paper name Code Llama Open Foundation Models for Code Paper Reading Note Paper URL https ai meta com research publicatio
  • SpringBoot + mybatis + mysql8.0.11 构建项目

    前几天在阐释使用mysql8 0 11 刚解决第三方工具链接没数据库的问题 然后兴高采烈的去搭建项目 进行使用 然后又是一种一种的问题冒出 具体出现的问题 以及相关的解决方式如下 主要是在建立链接的时候一些配置参数的问题 本人使用的是Int
  • 都2023年了,为什么大家还都在吹捧 Python?

    2023 年 Python 还可学吗 答案当然是可 近些年间 Python 的火热有目共睹 作为一种功能强大的高级编程语言 在 2018 年的时候它的流行程度就得到了大幅提高 图源 Stack Overflow 网站编程语言浏览量统计数字
  • PyTorch教程—B站刘二大人笔记

    PyTorch教程 B站刘二大人笔记 PyTorch代码笔记 1 linear py 2 gradient py 3 back py 4 pytorch py 5 logistic py 6 multiple py 7 data py 8
  • C++链表的建立,排序,删除

    描述 使用随机数建立链表节点 节点的结构很简单 就是一个整形数 随机数 和一个指针 有三个函数 第一个函数建立链表 第二个函数对链表进行排序 第三个函数将链表中所有有重复数字的节点删除 只留只出现过一次的节点 输入 链表的节点数 输出 1