创建一个简单的单链表
1.头文件的Slist.h的代码
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
typedef int SListint;
typedef struct Slist//单链表
{SListint data;struct Slist* next;
}SL;//尾插
void SlistPushBank(SL** plist,SListint x);
//头插
void SlistPushFront(SL** plist, SListint x);
//打印
void Slist_print(SL** plist);
//尾删
void SlistPopBank(SL** plist);
//头删
void SlistPopFront(SL** plist);
//查找
SL* SlistFind(SL* plist, SListint x);
//在pos位置前插入x
void SlistInsert(SL** plist, SL* pos, SListint x);
//删除pos位置的值
void SListFrase(SL** plist, SL* pos);
//销毁
void SlistDestroyed(SL** plist);
2.源文件Slist.h的函数实现
#include"Slist.h"
//申请空间函数
SL* kuorong(SListint x)
{SL* newnode = (SL*)malloc(sizeof(SL));newnode->data = x;newnode->next = NULL;return newnode;
}
//尾插
void SlistPushBank(SL** plist, SListint x)
{assert(plist);SL* newnode = kuorong(x);if (*plist == NULL){*plist = newnode;}else { SL* pcur = *plist; while (pcur->next != NULL){pcur = pcur->next;}pcur->next = newnode;}
}
//头插
void SlistPushFront(SL** plist, SListint x)
{assert(plist);SL* newnode = kuorong(x);newnode->next = *plist;*plist = newnode;
}
//打印
void Slist_print(SL** plist)
{SL* ret = *plist;while (ret)//ret != NULL{printf("%d->", ret->data);ret = ret->next;}printf("NULL\n");
}
//尾删
void SlistPopBank(SL** plist)
{assert(*plist);//*plist == NULL 1if ((*plist)->next == NULL)// 2{free(*plist);*plist = NULL;}else // 3{SL* ret = *plist;SL* pcur = *plist;while (ret->next != NULL){pcur = ret;ret = ret->next;}free(ret);pcur->next = NULL;}
}
//头删
void SlistPopFront(SL** plist)
{assert(*plist);if ((*plist)->next == NULL){free(*plist);}else{SL* ret = (*plist)->next;free(*plist);*plist = ret;}
}
//查找
SL* SlistFind(SL* plist, SListint x)
{SL* ret = plist;while (ret){if (x == ret->data){return ret;}ret = ret->next;}return NULL;
}
//在pos之前插入数据
void SlistInsert(SL** plist, SL* pos, SListint x)
{assert(plist);if (pos == *plist){SlistPushFront(plist, x);//如果只有一个数值,那么调用头插,不然会报错}else{SL* ret = *plist;SL* newnode = kuorong(x);while (ret->next != pos){ret = ret->next;}newnode->next = ret->next;ret->next = newnode;}
}
//删除pos位置的值
void SListFrase(SL** plist, SL* pos)
{assert(plist);if (pos == *plist){SlistPopFront(plist);}else{SL* ret = *plist;while (ret->next != pos){ret = ret->next;}ret->next = pos->next;free(pos);}
}
//销毁
void SlistDestroyed(SL** plist)
{SL* ret = *plist;while (ret){SL* cur = ret->next;free(ret);ret = cur;}*plist = NULL;
}
3.测试test.c的代码
#define _CRT_SECURE_NO_WARNINGS 1
#include"Slist.h"
void menu()
{printf("*************************\n");printf("1.尾插 2.头插\n");printf("3.尾删 4.头删\n");printf("5.打印链表 6.查找元素\n");printf("7pos前插入 8.删除pos\n");printf("9.销毁 10.退出菜单\n");printf("*************************\n");
}
int main()
{int input = 0, x = 0, y = 0;SL* plist = NULL;do{menu();printf("请输入你的选择\n");scanf("%d", &input);switch (input){case 1:printf("\n请输入尾插的数值,输入-1结束\n");do{scanf("%d", &x);if (x != -1){SlistPushBank(&plist, x);}} while (x != -1);break;case 2:printf("请输入头插的数值,输入-1结束\n");do{scanf("%d", &x);if (x != -1){SlistPushFront(&plist, x);}} while (x != -1);break;case 3:SlistPopBank(&plist);printf("尾删成功\n");break;case 4:SlistPopFront(&plist);printf("头删成功\n");break;case 5:Slist_print(&plist);break;case 6:printf("请输入你要查找的元素\n");scanf("%d", &x);SL* ret = SlistFind(plist,x);if (ret != NULL){printf("找到了\n");}else{printf("没找到\n");}break;case 7:printf("请输入你要在哪个pos之前插入\n");scanf("%d", &x);SL* retpos1 = SlistFind(plist,x);if (retpos1 == NULL){printf("要插入的pos数值不存在\n");exit(1);}else {printf("请输入要插入的数值\n");scanf("%d", &y);SlistInsert(&plist, retpos1, y);printf("插入成功\n");}break;case 8:printf("请输入你要删除的pos数值\n");scanf("%d", &x);SL* retpos2 = SlistFind(plist,x);if (retpos2 == NULL){printf("要删除的pos节点不存在\n");exit(1);}else{SListFrase(&plist, retpos2);printf("删除成功\n");}break;case 9:SlistDestroyed(&plist);printf("销毁成功\n");break;case 10:input = -1;printf("退出中....\n");break;default:printf("请选择1-10的方法\n");break;}} while (input != -1);return 0;
}
相关文章:
创建一个简单的单链表
1.头文件的Slist.h的代码 #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> typedef int SListint; typedef struct Slist//单链表 {SListint data;struct Slist* next; }SL;//尾插 void SlistPushBank(SL*…...
15.1 Zookeeper简介安装及基础使用
1. Zookeeper介绍 1.1 介绍 1.2 应用场景简介 1.3 zookeeper工作原理 1.4 zookeeper特点...
详细说明Java中Map和Set接口的使用方法
Map与Set的基本概念与场景 Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有: 1. 直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢。 2. 二分查找&#x…...
CSS3 scale 适配
Scale适配,在前端开发中,特别是在CSS3中,主要指的是使用scale()函数对元素进行缩放处理,以适应不同的屏幕尺寸或达到特定的视觉效果。以下是对Scale适配的详细介绍: 一、基本概念 scale() 是CSS3中transform属性的一…...
SX_初识GitLab_1
1、对GitLab的理解: 目前对GitLab的理解是其本质是一个远程代码托管平台,上面托管多个项目,每个项目都有一个master主分支和若干其他分支,远程代码能下载到本机,本机代码也能上传到远程平台 1.分支的作用:…...
这才是 PHP 高性能框架 Workerman 的立命之本
大家好,我是码农先森。 在这个大家都崇尚高性能的时代,程序员的谈笑间句句都离不开高性能,仿佛嘴角边不挂着「高性能」三个字都会显得自己很 Low,其中众所皆知的 Nginx 就是高性能的代表。有些朋友可能连什么是高性能都不一定理解…...
Python——记录pip问题(解决下载慢、升级失败问题)
在python开发中,经常需要使用到各种各样的库。 pip又是我们常用的安装工具。但是国外的源下载速度实在太慢,经常导致超时。 有很多朋友刚刚学Python的时候,会来问为什么pip下载东西这么慢啊? 而且pycharm里面下载库也是非常的慢…...
Windows Server 2025 Preview 部署 Ⅰ—— ISO下载和硬件要求
目录 1. 预览版下载2. Windows 服务器的硬件要求2.1安装 Windows Server 2025 虚拟机注意事项2.2 CPU2.3 RAM / Memory2.4 存储 Storage2.5 网络 Network2.6 其他需求 1. 预览版下载 下载网站:https://www.microsoft.com/en-in/evalcenter/download-windows-server…...
AI2-CUDA、CuDNN、TensorRT的详细安装教程
一、查看本机的显卡 首先你要看你的电脑是否有NVIDIA的独立显卡,你可以在设备管理器-显示适配器中查看 点击“开始”--找到“NVIDA Control Panel” 点击帮助--系统信息--组件,查看NVCUDA.DLL对应的产品名称,就可以看住CUDA的版本号 这里的版…...
TCP连接中重复使用了两个相同的端口怎么办
1.检查并避免重复配置: 首先,应该检查系统的配置和应用程序的设置,确保没有错误地将多个服务或进程配置为使用相同的端口号。 使用网络监控工具(如netstat、ss等)来查看当前哪些端口正在被使用。 2.使用端口复用选项…...
如何自定义异常
目录 为什么自定义异常自定义异常的步骤参考资料 为什么自定义异常 自定义异常是指开发者根据应用程序的需求和逻辑,自行定义的异常类。与 Java 提供的标准异常类(如 NullPointerException、IOException 等)不同,自定义异常允许程…...
C++中的依赖注入
目录 1.概述 2.构造函数注入 3.setter方法注入 4.接口注入 5.依赖注入框架 6.依赖注入容器 7.依赖注入框架的工作原理 8.依赖注入的优势 9.总结 1.概述 依赖注入是一种设计模式,它允许我们在不直接创建对象的情况下为对象提供其依赖项;它通过将…...
CSS平面转换-平移
平面转换-平移 属性 transform: translate(X轴移动距离, Y轴移动距离); 取值 像素单位取值百分比(参照盒子自身尺寸计算结果)正负均可 技巧translate()只写一个值表示只沿着X轴移动单独设置X或Y轴距离:translateX()或translateY() 代码 …...
Linux-3:Shell编程——基础语法(0-50%)
目录 前言 一、变量 1.定义变量 2.使用变量 3.修改变量 4.将命令的结果赋值给变量 5.只读变量 6.删除变量 二、传递参数 三、字符串 1.字符串举例 2.统计字符串长度 3.字符串拼接 4.截取字符串 总结 前言 Shell是一种程序设计语言。作为命令语言,它…...
C++ --> string类模拟实现(附源码)
欢迎来到我的Blog,点击关注哦💕 前言: C中STL扮演着极其重要的角色,学习C重中之重的就是学习STL,虽然string不作为containers的其中一员,但是也是值得学习的le类。下面就进行string的模拟实现 string的模拟…...
基于PHP+MySQL组合开发的微信活动投票小程序源码系统 带完整的安装代码包以及搭建部署教程
系统概述 在当今数字化时代,微信作为社交媒体的巨头,为企业和个人提供了丰富的互动营销平台。其中,投票活动作为一种有效的用户参与和互动方式,被广泛应用于各种场景。为了满足这一需求,我们推出了一款基于PHPMySQL组…...
利用Arcgis设置分式标注(分子分母标注)
因工作需要,需要设置分式标注,下面详细介绍下如何利用arcgis 设置分式标注,以下操作以供参考,如有疑义可提出。 一、准备工作 软件:arcmap 示例数据:行政区shp矢量图 二、操作步骤 1.添加数据 将行政区sh…...
大麦网抢票攻略:使用Python Selenium实现
随着互联网技术的发展,在线购票已成为人们获取演出、比赛等活动门票的主要方式。然而,面对热门活动,门票往往在开售瞬间被抢购一空。为了解决这一问题,本文将介绍如何利用Python和Selenium技术实现大麦网的自动抢票。 1. 环境准备…...
Navicat 在整个数据库中查找字符
Navicat 在整个数据库中查找字符 1.首先打开Navicat,连接目标数据库。2.选择工具选项卡,选择在数据库或模式中查找。3.查找前填入关键字信息,点击查找4.双击查找到数据,进行查看 说明:当我们知道数据库有数据的关键字,…...
Python基础—处理时间问题
一文帮助您解决99%时间处理问题...
如何选择合适的自动化测试工具!
选择合适的自动化测试工具是一个涉及多方面因素的决策过程。以下是一些关键步骤和考虑因素,帮助您做出明智的选择: 一、明确测试需求和目标 测试范围:确定需要自动化的测试类型(如单元测试、集成测试、UI测试等)和测试…...
数字图像边缘曲率计算及特殊点检测
一、曲率和数字图像边缘曲率检测常用方法简介 边缘曲率作为图像边缘特征的重要参数,不仅反映了边缘的几何形状信息,还对于图像识别、图像分割、目标跟踪等任务具有显著影响。 曲线的曲率(curvature)就是针对曲线上某个点的切线方向…...
python map
在 Python 中,如果你指的是字典(dictionary),可以使用字典的 .items() 方法来遍历键值对。Python 中没有严格意义上的 Map 类型,而是使用字典来实现类似于键值对映射的功能。 遍历字典的键值对 可以使用 for 循环和 …...
每日一练 - NFV部署应用环境
01 真题题目 NFV 常常部署在下列哪些应用环境中?(多选) A.数据中心 B.网络节点 C.用户接入侧 D.客户机/服务器 02 真题答案 ABC 03 答案解析 NFV(Network Functions Virtualization,网络功能虚拟化)是一种技术,它允许在标准的…...
031-GeoGebra中级篇-GeoGebra的布尔值
在 GeoGebra 中,布尔值和条件判断是实现动态数学模型和交互式几何图形的重要工具。布尔值,即逻辑值,只有两个可能的取值:真(True)或假(False)。通过使用布尔值,我们可以创…...
基于Debian用户安装星火商店
星火商店下载地址:https://www.spark-app.store/ 本文章我以kali linux来做示范 注:基本debian的linux包括ubuntu,mint linux,kali linux,Pop!_OS,deepin等等 1.点击下载最新版本 2.点击下载 3.点击开始下载(它会自动跳转网页) 4.选择要下载…...
《计算机网络》(第8版)课后习题答案
【1-01】 计算机网络可以向用户提供哪些服务? 解答:这道题没有现成的标准答案,因为可以从不同的角度来看“服务”。 首先要明确的是,计算机网络可以向用户提供的最重要的功能有两个:连通性和共享。所 谓连通性,就是计算机网络使上网用户之间都可以交换信息,好像这些用户…...
我们的网站被狗爬了!
大家好,我是程序员鱼皮。 世风日下,人心不古。我们的程序员面试刷题网站 《面试鸭》 才刚刚上线了一个多月,就由于过于火爆,被不少同行和小人发起网络攻击。 而且因为我们已经有 4500 多道人工整理的企业高频面试题、100 多个各…...
docker安装与container基本使用
安装 Homebrew 的 Cask 已经支持 Docker for Mac, mac用户狂喜 brew install --cask --appdir/Applications docker其他入门用法可参考 Docker Hello World- 菜鸟教程 或网上自行搜索博客学习。本文主要记录我运行go-zero-mall用到的一些注意点。当然,gonivinck项…...
掌握文本搜索的利器:深入解析 Linux grep 命令的强大功能
grep 是一个强大的命令行工具,用于在文件中搜索指定的模式(字符串或正则表达式)。它的名字来源于 "global regular expression print",常用于文本处理、日志分析等任务。以下是 grep 命令的详细介绍和常用操作: 基本用法 搜索匹配的行 grep "pattern"…...
网站建设优化论坛/北京seo优化分析
系统更新安装完系统之后,需要更新一些补丁。CtrlAltT调出终端,执行一下代码:$sudo apt-get update$sudo apt-get upgrade卸载libreOfficelibreoffice事ubuntu自带的开源office软件,体验效果不如windows上的office,于是…...
郑州优化网站/seo发展前景怎么样啊
教育 -大学生身体活动与健康-章节资料考试资料-江西师范大学【】 第一章单元作业 第一章单元测试 1、【单选题】磷酸原系统和乳酸能系统供能时的共同特点是( ) A、生成乳酸 B、产生大量的ATP C、生成CO2和水 D、不需要氧 参考资料【 】 2、【单选题】糖、脂肪和蛋白质的热价约为…...
常州全景网站制作/东莞网络推广平台
从2.0开始Spring Security对服务层的方法的安全有了实质性的改善。他提供对JSR-250的注解安全支持象框架原生的Secured注解一样好。从3.0开始你也可以使用新的基于表达式的注解。你可以应用安全到单独的bean,使用拦截方法元素去装饰Bean声明,或者你可以在整个服务层…...
网站建设 签约信息/提高搜索引擎检索效果的方法
前言 javacv开发包是用于支持java多媒体开发的一套开发包,可以适用于本地多媒体(音视频)调用以及音视频,图片等文件后期操作(图片修改,音视频解码剪辑等等功能),这里只使用javacv来…...
wordpress 3.8页面伪静态化 html/就业培训机构有哪些
本篇文章将对一些常见的python面试题目进行整理,并做简要的回答,可供参考,如果你有更好更全面的答案,那么请在评论区评论,一起交流学习^0^ 1. 列举 Python2 和 Python3 的区别? 答: 默认编码不同ÿ…...
做网站的步骤/十大暗网搜索引擎
题目描述 FJ的n头奶牛(1<n<50000)在被放养在一维的牧场。第i头奶牛站在位置x(i),并且x(i)处有一个高度值h(i)(1<x(i),h(i)<1000000000)。 一头奶牛感觉到拥挤当且仅当它的左右两端都有一头奶牛所在的高度…...