数据结构与算法-单链表小练习

news2024/11/26 2:32:50

🎈类定义

typedef int ElemType;
typedef struct LNode
{
	ElemType data;
	LNode* next;
}LNode;
class LinkList
{
private:
	LNode* head;
	
public:
	LinkList();
	~LinkList();
	int deletelist(int x);
	void CreatList_h(int n);
	void print_evennode();
	void divide_LinkList(LNode*& heada, LNode*& headb);
	void print();
	LNode* Gethead()
	{
		return head;
	}
};

🎈1.创建空表(构造函数实现)

LinkList::LinkList()//创建空表
{
	head = new LNode;
	head->next = NULL;
}

🎈2.头插法创建n个元素的线性表

void LinkList::CreatList_h(int n)//头插法创建n个元素的线性表
{
	LNode* s;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		s = new LNode;
		cin >> s->data;
		s->next = head->next;
		head->next = s;
	}
}

🎈3.一个带头结点的链表存放一组整数,设计一个算法删除值等于X的所有结点

int LinkList::deletelist(int x)//一个带头结点的单链表存放一组整数,设计一个算法删除值等于x的所有结点(成功return 1,失败return 0)
{
	LNode* pr = head, * p = head->next;
	int tag = 0;
	while (p)
	{
		if (p->data != x)
		{
			pr = p;
			p = p->next;
		}
		else
		{
			pr->next = p->next;
			delete p;
			p = pr->next;
			tag = 1;
		}
	}
	if (tag == 1)
		return 1;
	else
		return 0;
}

🎈4.计算线性表中值为偶数的结点的个数

void LinkList::print_evennode()//计算线性表中值为偶数的结点的个数
{
	LNode* p = head->next;
	int count = 0;
	while (p)
	{
		if (p->data % 2 == 0)
			count++;
		p = p->next;
	}
	cout << "该链表中偶数结点的个数为:" << count << endl;
}

🎈5.一个带头结点的单链表heada存放一组整数表,设计分裂heada的算法,偶数在heada中,奇数存放在headb中

void LinkList::divide_LinkList(LNode*& heada, LNode*& headb)//一个带头结点的单链表heada存放一组整数表,设计分裂heada的算法,偶数在heada中,奇数存放在headb中
{
	LNode* pr = heada, * p = heada->next;
	LNode* pb = headb;
	while (p)
	{
		if (p->data % 2 == 0)
		{
			pr = p;
			p = p->next;
		}
		else
		{
			pb->next = p;
			pb = pb->next;
			pr->next = p->next;
			p = p->next;
		}
	}
	pb->next = NULL;
}

🎈6.打印链表

void LinkList::print()//打印链表
{
	LNode* p;
	p = head->next;
	while (p)
	{
		cout << p->data << " ";
		p = p->next;
	}
	cout << endl;
}

🎈全部代码

#define _CRT_SECURE_NO_WARNINGS 1
//单链表的基本操作
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
	ElemType data;
	LNode* next;
}LNode;
class LinkList
{
private:
	LNode* head;
	
public:
	LinkList();
	~LinkList();
	int deletelist(int x);
	void CreatList_h(int n);
	void print_evennode();
	void divide_LinkList(LNode*& heada, LNode*& headb);
	void print();
	LNode* Gethead()
	{
		return head;
	}
};
LinkList::LinkList()//创建空表
{
	head = new LNode;
	head->next = NULL;
}
LinkList::~LinkList()
{
	LNode* p = head;
	while (head)
	{
		p = head;
		head = head->next;
		delete p;
	}
}
void LinkList::CreatList_h(int n)//头插法创建n个元素的线性表
{
	LNode* s;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		s = new LNode;
		cin >> s->data;
		s->next = head->next;
		head->next = s;
	}
}
int LinkList::deletelist(int x)//一个带头结点的单链表存放一组整数,设计一个算法删除值等于x的所有结点(成功return 1,失败return 0)
{
	LNode* pr = head, * p = head->next;
	int tag = 0;
	while (p)
	{
		if (p->data != x)
		{
			pr = p;
			p = p->next;
		}
		else
		{
			pr->next = p->next;
			delete p;
			p = pr->next;
			tag = 1;
		}
	}
	if (tag == 1)
		return 1;
	else
		return 0;
}
void LinkList::print_evennode()//计算线性表中值为偶数的结点的个数
{
	LNode* p = head->next;
	int count = 0;
	while (p)
	{
		if (p->data % 2 == 0)
			count++;
		p = p->next;
	}
	cout << "该链表中偶数结点的个数为:" << count << endl;
}
void LinkList::divide_LinkList(LNode*& heada, LNode*& headb)//一个带头结点的单链表heada存放一组整数表,设计分裂heada的算法,偶数在heada中,奇数存放在headb中
{
	LNode* pr = heada, * p = heada->next;
	LNode* pb = headb;
	while (p)
	{
		if (p->data % 2 == 0)
		{
			pr = p;
			p = p->next;
		}
		else
		{
			pb->next = p;
			pb = pb->next;
			pr->next = p->next;
			p = p->next;
		}
	}
	pb->next = NULL;
}
void LinkList::print()//打印链表
{
	LNode* p;
	p = head->next;
	while (p)
	{
		cout << p->data << " ";
		p = p->next;
	}
	cout << endl;
}

int main()
{
	
	LinkList L,B;
	LNode* HeadA = L.Gethead();
	LNode* HeadB = B.Gethead();
	L.CreatList_h(10);
	cout << "该线性表为:";
	L.print();
	L.print_evennode();
	L.deletelist(4);
	cout << "删除值为4的结点后线性表为:";
	L.print();
	cout << "未分裂前的链表:";
	L.print();
	L.divide_LinkList(HeadA, HeadB);
	cout << "分裂后的链表:" << endl;
	L.print();
	B.print();
	return 0;
}

✅调试结果:
在这里插入图片描述

好啦,关于单链表的小练习到这里就结束啦,后期会继续更新数据结构与算法的相关知识,欢迎大家持续关注、点赞和评论!❤️❤️❤️

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

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

相关文章

『GitHub Actions』部署静态博客指南

前言 之前博主是使用的 Jenkins 实现 vuepress 博客的自动部署与持续交付&#xff0c;但是因为现在迁移服务器到海外&#xff0c;并且服务器配置降低。现在经常出现服务器的 Jenkins 构建过程中 CPU 占用率过高&#xff0c;导致服务器卡死 然后我想的话既然只是部署静态博客&…

基于Java的博客管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

Puppeteer实现上下滚动、打开新Tab、用户数据保存(三)

Puppeteer实现上下滚动、打开新Tab、用户数据保存&#xff08;三&#xff09; Puppeteer实现上下滚动、打开新Tab、用户数据保存&#xff08;三&#xff09;一、实现上下滚动二、打开新Tab三、用户数据保存四、效果演示 一、实现上下滚动 在自动化测试中&#xff0c;我们需要能…

计算机毕业设计选题推荐-springboot 蛋糕甜品店管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

YOLO目标检测——跌倒摔倒数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;公共安全监控、智能家居、工业安全等活动区域无监管情况下的人员摔倒事故数据集说明&#xff1a;YOLO目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富。使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含…

SpringBoot面试题1:什么是SpringBoot?为什么要用SpringBoot?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:什么是SpringBoot? Spring Boot 是一个用于快速开发独立的、基于 Spring 框架的应用程序的开源框架。它简化了 Spring 应用的配置和部署过程,使…

稚晖君项目复刻:L-ink门禁卡(1)——环境搭建与第一个项目创建

行文目录 前言其他文章正文开始STM32CubeMX安装STM32CubeMX安装L0的固件支持包Clion安装OpenOCD安装MinGw安装arm-none-eabi-gcc安装Clion配置 创建STM32工程创建STM32CubeMX工程更改芯片型号 参考文献 前言 其实关于稚晖君的L-ink门禁卡在我本科阶段就已经刷过好几次了&#x…

前端页面布局之【响应式布局】

目录 &#x1f31f;前言&#x1f31f;优点&#x1f31f;缺点&#x1f31f;media兼容性&#x1f31f;利用CSS3-Media Query实现响应式布局&#x1f31f;常见的媒体类型&#x1f31f;常见的操作符&#x1f31f;属性值&#x1f31f;设备检测&#x1f31f;响应式阈值选取&#x1f3…

使用vue3+element-ui plus 快速构建后台管理模板

一、安装 vue3 脚手架 npm create vuelatestcd vue-ui-template #切换到刚刚创建好的vue项目根目录中 npm install #下载项目所需要的依赖包 npm run dev #启动运行项目服务项目启动后&#xff0c;默认页面显示如下&#xff1a; 二、安装element-ui plus 官网链接&#xff1a;…

CDN到底有什么魅力,值得网站接入

当谈到提高网站性能和用户体验时&#xff0c;内容分发网络&#xff08;Content Delivery Network&#xff0c;CDN&#xff09;是一项不可忽视的技术。CDN加速已经成为许多在线企业的首选&#xff0c;用以减少加载时间、提高安全性和全球可访问性。本文将深入探讨CDN的原理、工作…

2023-10-14 LeetCode每日一题(只出现一次的数字)

2023-10-14每日一题 一、题目编号 136. 只出现一次的数字二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时…

基于Java的大学生实习管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【LVGL】SquareLine Studio入门基础操作

1.SquareLine Studio基础 在这篇文章中将介绍SquareLine Studio的基础操作、解释如何加载一个项目、布局结构。    启动软件后,可以加载之前的项目、创建项目、加载一个示例。    这里以打开示例audio_mixer为例,可以双击该项目打开或者选中该项目点击右下角的【创建】按…

从基础到卷积神经网络(第13天)

1. PyTorch 神经网络基础 1.1 模型构造 1. 块和层 首先,回顾一下多层感知机 import torch from torch import nn from torch.nn import functional as Fnet = nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))X = torch.rand(2, 20) # 生成随机输入(批…

Java电子病历编辑器项目源码 采用B/S(Browser/Server)架构

电子病历&#xff08;EMR,Electronic Medical Record&#xff09;是用电子技术保存、管理、传输和重现的数字化的病人的医疗记录&#xff0c;取代手写纸张病历&#xff0c;将医务人员在医疗活动过程中,使用医疗机构管理系统生成的文字、符号、图表、图形、数据、影像等数字化内…

27 mysql 组合索引 的存储以及使用

前言 这里来看一下 mysql 中索引的 增删改查 查询在前面的系列文章中都有使用到 这里 来看一下 增删改 的相关实现 索引记录 和 数据记录 的处理方式是一致的 这里来看一下 组合索引 的相关, 以及 特性 组合索引的存储以及使用 创建数据表如下, 除了主键之外, 创建了…

Leetcode刷题笔记--Hot61-70

1--课程表&#xff08;207&#xff09; 主要思路&#xff1a; 用 in 记录每一门课程剩余的先修课程个数&#xff0c;当剩余先修课程个数为0时&#xff0c;将该课程加入到队列q中。 每修队列q中的课程&#xff0c;以该课程作为先修课程的所有课程&#xff0c;其剩余先修课程个数…

安卓camera2获取到的YUV420_888格式详解

本文字数&#xff1a;7885字 预计阅读时间&#xff1a;45分钟 安卓音视频开发中的一个环节是摄像头采集数据&#xff0c;而 Android 平台上摄像头采集的 API 有两套&#xff0c;camera1 和 camera2。本文主要讲的是 camera2 这套 API 在采集数据并指明 YUV420_888 格式时&#…

软件设计师_面向对象_学习笔记

文章目录 1 面向对象基本概念2 设计模式3 UML4 设计模式4.1 设计模式的基本概念4.2 设计模式的分类4.3 创建型模式 1 面向对象基本概念 2 设计模式 3 UML 4 设计模式 4.1 设计模式的基本概念 模式&#xff1a;通俗的来说就是成功方案的复用。 架构模式从全局看待问题。设计模式…