代码贴--链表--数据机构

news2025/1/12 3:52:44

本博客将记录链表代码(单链表),后续其他链表和其他数据结构内容请看我的其他博客

头文件(SList.h)

#pragma once
#include<iostream>
#include<bits/stdc++.h>
using namespace std;

typedef int SLTDataType;

struct SListNode
{
	int data;
	struct SListNode* next;
};

typedef struct SListNode SLTNode;

void SListPrint(SLTNode* phead);
SLTNode* BuySListNode(SLTDataType x);
void SListPushBack(SLTNode*& pphead, SLTDataType x);
void SListPushFront(SLTNode*& phead, SLTDataType x);
void SListPopBack(SLTNode*& phead);
void SListPopFront(SLTNode*& phead);
SLTNode* SListFind(SLTNode*& phead, SLTDataType x);

void SListInsert(SLTNode*& phead, SLTNode* pos, SLTDataType x);
void SListErase(SLTNode*& phead, SLTNode* pos);

源文件(SList.cpp)

#include"SList.h"

void SListPrint(SLTNode* phead)
{
	SLTNode* cur = phead;
	while (cur != NULL)
	{
		cout << cur->data << "->";
		cur = cur->next;
	}
	cout << "NULL" << endl;
}

SLTNode* BuySListNode(SLTDataType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	newnode->data = x;
	newnode->next = NULL;
	return newnode;
}

void SListPushBack(SLTNode*& phead, SLTDataType x)//注意是引用或者指针的指针!!!
{
	SLTNode* newnode = BuySListNode(x);

	if (phead == NULL)
	{
		phead = newnode;
	}
	else
	{
		//找尾节点的指针
		SLTNode* tail = phead;
		while (tail->next != NULL)
		{
			tail = tail->next;
		}

		//尾节点,链接新节点
		tail->next = newnode;
	}
}
void SListPushFront(SLTNode*& phead, SLTDataType x)
{
	SLTNode* newnode = BuySListNode(x);
	newnode->next = phead;
	phead = newnode;


}
void SListPopFront(SLTNode*& phead)
{
	SLTNode* next = phead->next;
	free(phead);
	phead = next;
}
void SListPopBack(SLTNode*& phead)
{
	if (phead == NULL)//空
	{
		return;
	}
	else if (phead->next == NULL)//一个节点
	{
		free(phead);
		phead = NULL;
	}
	else//一个以上的节点
	{
		SLTNode* prev = NULL;
		SLTNode* tail = phead;
		while (tail->next != NULL)
		{
			prev = tail;
			tail = tail->next;
		}
		tail->next = NULL;
		free(tail);
		prev->next = NULL;
	}
}

SLTNode* SListFind(SLTNode*& phead, SLTDataType x)
{
	SListNode* cur = phead;
	//while(cur!=NULL)
	while (cur)
	{
		if (cur->data == x)
		{
			return cur;
		}
			cur = cur->next;
	}
	return NULL;
}


//在pos的前面插入x
void SListInsert(SLTNode*& phead, SLTNode* pos, SLTDataType x)
{
	if (pos == phead)//判断是否是头插
	{
		SListPushFront(phead, x);
	}
	else
	{
		SLTNode* prev = phead;
		while (prev->next != pos)
		{
			prev = prev->next;
		}
		SLTNode* newnode=BuySListNode(x);
		prev->next = newnode;
		newnode ->next= pos;
	}
}

//删除pos位置的值
void SListErase(SLTNode*& phead,SLTNode* pos)
{
	if (pos ==phead)//判断是不是头删
	{
		SListPopFront(phead);
	}
	else
	{
		SLTNode* prev = phead;
		while (prev->next!=pos)
		{
			prev = prev ->next;
		}
		prev->next = pos->next;
		free(pos);
	}
}

测试文件(Test.cpp)

#include"SList.h"

void TestSList1()
{
	SLTNode* phead = NULL;
	SListPushBack(phead, 1);
	SListPushBack(phead, 2);
	SListPushBack(phead, 3);
	SListPushBack(phead, 4);
	SListPrint(phead);

	SListPushFront(phead, 0);
	SListPrint(phead);

	SListPushFront(phead, -1);
	SListPopFront(phead);
	SListPopFront(phead);
	SListPrint(phead);

	SListPopBack(phead);
	SListPopBack(phead);
	SListPrint(phead);
	
	//在1前面加一个10
	SLTNode* pos1 = SListFind(phead,1);
	SListInsert(phead, pos1, 10);
	SLTNode* pos2 = SListFind(phead, 2);
	SListInsert(phead, pos2, 20);
	SLTNode* pos3 = SListFind(phead, 3);
	SListInsert(phead, pos3, 30);
	SListPrint(phead);

	SLTNode* pos10 = SListFind(phead, 10);
	SListErase(phead, pos10);
	SLTNode* pos20 = SListFind(phead, 20);
	SListErase(phead, pos20);
	SListPrint(phead);
}

int main()
{
	TestSList1();
	
	return 0;
}

代码演示

如果这个博客对你有帮助,给博主一个免费的点赞就是最大的帮助❤
欢迎各位点赞收藏关注哦❤
如果有疑问或有不同见解,欢迎在评论区留言❤
后续会继续更新大连理工大学相关课程和有关数据结构的内容和代码
点赞加关注,学习不迷路,好,本次的学习就到这里啦!!!

我们下次再见!

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

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

相关文章

windows系统玩游戏找不到d3dx9_43.dll缺失,无法启动此程序的解决方法

今日&#xff0c;我们要深入讨论d3dx9_43.dll文件的重要性及其缺失问题。最近&#xff0c;我也遇到了这个文件丢失的困扰&#xff0c;因此想借此机会与大家分享如何解决d3dx9_43.dll缺失的问题。 一.电脑d3dx9_43.dll丢失会提示什么&#xff1f; 关于电脑提示d3dx9_43.dll丢失…

【人力资源开发】某主题公园人力资源开发管理咨询项目纪实

虽然很多企业将“人事部”改为“人力资源部”&#xff0c;但是企业的人力资源管理水平却仍停留在“人事管理”的阶段。该主题公园也是如此。随着公园的不断发展&#xff0c;其人力资源管理问题逐渐显露&#xff0c;而管理者也不清楚问题的根源在哪里&#xff0c;只能采取“头疼…

AWS入门实践-AWS CLI工具的使用介绍

AWS CLI&#xff08;Amazon Web Services Command Line Interface&#xff09;是一个强大的工具&#xff0c;它允许您直接从命令行与AWS服务进行交互。这不仅可以加快许多任务的处理速度&#xff0c;而且还可以通过脚本自动化。 一、AWS CLI工具的安装 1、Windows 安装下载…

java-双列集合

什么是双列集合&#xff1f; 集合中每次存的数据是成对存入的 以及它的特点是什么&#xff1f; 特别注意&#xff1a;键不可重复&#xff0c;值可以 Map是双列集合的顶层接口 Map 它有哪些方法呢&#xff1f; Map的常用API 添加 添加操作的代码如下 我们要明白一些细节&…

【项目笔记】java微服务:黑马头条(day02)

文章目录 app端文章查看&#xff0c;静态化freemarker,分布式文件系统minIO1)文章列表加载1.1)需求分析1.2)表结构分析1.3)导入文章数据库1.3.1)导入数据库1.3.2)导入对应的实体类 1.4)实现思路1.5)接口定义1.6)功能实现1.6.1)&#xff1a;导入heima-leadnews-article微服务&am…

C++初阶:内存管理

目录 1. C/C中各种资源的内存分布1.1 C/C程序内存区域划分1.2 各资源的内存分布情况&#xff08;练习&#xff09; 2. C中的动态内存管理方式2.1 new/delete开辟内置类型空间2.2 new/delete开辟销毁自定义类型空间 3. operator new 与 operator delete函数4. new与delete的实现…

逆变器功率软起斜率要求

安规说明 在NB32004中&#xff0c;有明确要求&#xff0c;有功功率调整速率不得超过正负10%Pn/min&#xff0c;包括起停机。 控制对象 控制功率最终是通过调整D轴电流给定来达到限制功率的目的&#xff0c;所以我们只要让D轴的电流给定限幅值按照10%/min增加就好了。 具体实…

openAI key 与ChatGPTPlus的关系,如何升级ChatGPTPLus

一、前言 先详细介绍一下Plus会员和Open API之间的区别&#xff1a; 实际上&#xff0c;这两者是相互独立的。举例来说&#xff0c;虽然您开通了Plus会员&#xff0c;并不意味着您就可以使用4.0版本的API。尽管这两个账户可以是同一个&#xff0c;但它们是完全独立的平台。 …

ChatGPT提问技巧:可解释的软提示

ChatGPT提问技巧&#xff1a;可解释的软提示 可解释的软提示是一种既能控制模型生成的文本&#xff0c;又能为模型提供一定灵活性的技术。 具体做法是为模型提供一组受控输入和一些有关所需输出的附加信息。这种技术可以使生成的文本更具可解释性和可控性。 提示示例及其公式…

DAY by DAY 史上最全的Linux常用命令汇总----man

man是按照手册的章节号的顺序进行搜索的。 man设置了如下的功能键&#xff1a; 功能键 功能 空格键 显示手册页的下一屏 Enter键 一次滚动手册页的一行 b 回滚一屏 f 前滚一屏 q 退出man命令 h 列出所有功能键 /word 搜索word字符串 注意&#xff1a…

每日一题——LeetCode1678.设计Goal解析器

方法一 splice 将字符串转为数组&#xff0c;对数组进行遍历&#xff0c;碰到G保持不变&#xff0c;继续循环&#xff0c;碰到 ( 看他后一位&#xff0c;是 ) 则删除两个元素&#xff0c;添加一个 o &#xff0c;不是则删除四个元素&#xff0c;添加元素 al &#xff0c;最后将…

JS ATM练习案例(复习循环知识)

需求&#xff1a;用户可以选择存钱、取钱、查看余额和退出功能。 分析&#xff1a;1循环时反复出现提示框&#xff0c;所以提示框写到循环里面。 2.退出的条件是4&#xff0c;所以是4就会结束循环 3.提前准备一个金额预存储 4取钱为减法操作&#xff0c;存钱为加法操作&#xf…

【论文阅读】Vision Mamba:双向状态空间模型的的高效视觉表示学习

文章目录 Vision Mamba:双向状态空间模型的的高效视觉表示学习摘要介绍相关工作用于视觉应用的状态空间模型 方法准备视觉MambaVim块结构细节高效分析计算效率 实验图片分类语义分割目标检测和实例分割消融实验双向SSM分类设计 总结和未来工作 论文地址&#xff1a; Vision Mam…

【C语言】qsort函数的使用

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《C语言》 &#x1f389;道阻且长&#xff0c;行则将至 前言 这篇博客主要是介绍qsort函数的使用&#xff0c;以及利用冒泡排序的方式模拟实现qsort 一.初识qsort函数 我们可以在…

LJXpaper

表1-3引用出现较滞后 1.3文献[42]有问题 如图 如图 如图 如图 &#x1f447; &#x1f447; &#x1f447; &#x1f447; &#x1f447; &#x1f447; &#x1f447; 要不要加连接词&#xff1a;4-11 4-12之间 &#…

数码管的动态显示(二)

1.原理 这个十六进制是右边的dp为高位。 数码管的动态显示&#xff0c;在第一个计数周期显示个位&#xff0c;在第二个周期显示十位&#xff0c;在第三个周期显示百位由于人眼的视觉和数码管的特性&#xff0c;感觉就是显示了234&#xff0c;每个数码管的显示需要从输入的数据里…

AHU 数据库 实验五

【实验名称】 实验5 数据库的数据更新与视图管理 【实验目的】 1. 熟悉数据更新操作的概念与操作类型&#xff1b; 2. 熟练掌握INSERT、UPDATE、DELETE语句的基本语法&#xff1b; 3. 熟练运用INSERT、UPDATE、DELETE语句实现数据的插入、修改与删除…

应对恶意IP攻击的有效方法

在当今数字化时代&#xff0c;网络攻击已经成为了互联网安全的重大挑战之一。恶意IP攻击是网络安全领域中的一种常见威胁&#xff0c;它可能导致数据泄露、服务中断、系统瘫痪等严重后果。因此&#xff0c;有效地应对恶意IP攻击至关重要。IP数据云将深入探讨如何应对恶意IP攻击…

OpenHarmony开源项目—工程管理

DevEco Studio的基本使用&#xff0c;请参考DevEco Studio使用指南。本章主要介绍如何使用DevEco Studio进行多设备应用开发。 说明&#xff1a; 本章的内容基于DevEco Studio 3.1.1 Release版本进行介绍&#xff0c;如您使用DevEco Studio其它版本&#xff0c;可能存在文档与产…

Oracle PL/SQL Programming 第9章:Numbers 读书笔记

总的目录和进度&#xff0c;请参见开始读 Oracle PL/SQL Programming 第6版 本章谈3点&#xff1a; 可使用的数字数据类型如何在数字和文本间转换PL/SQL 内置数值函数 Numeric Datatypes NUMBER&#xff1a;平台无关的实现&#xff0c;适合处理货币金额PLS_INTEGER 和 BINA…