单链表专题实验

答案:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef int SLTDataType;
typedef struct SListNode {SLTDataType data;struct SListNode* next;
}SLTNode;
void PrintSLT(SLTNode* phead)    //打印单链表
{SLTNode* pcur = phead;while (pcur){printf("%d->", pcur->data);pcur = pcur->next;}printf("NULL\n");
}
SLTNode* SLTBuyNode(SLTDataType x)         //创建新结点
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL)        //如果创建新结点失败{perror("malloc fail!");       //报错原因exit(1);              //结束退出}newnode->data = x;newnode->next = NULL;return newnode;
}
void SLTPushFront(SLTNode** pphead, SLTDataType x)     //头插
{assert(pphead);        //避免传进的二级指针为空SLTNode* newnode = SLTBuyNode(x);newnode->next = *pphead;           //头插*pphead = newnode;              //新结点为头结点
}
void SLTInsert(SLTNode** pphead, int i , SLTDataType x)       //在指定位置之前插入数据
{assert(pphead && *pphead);    //避免传入空的二级指针以及是空链表assert(i >= 0);SLTNode* newnode = SLTBuyNode(x);if (i == 0)        //如果是在头结点之前插入{SLTPushFront(pphead, x);    //调用头插函数}else {SLTNode* prev = *pphead;for (int n = 1; n <= i ; n++)     //遍历找到i之前的结点位置{	if (n == i)     //插入{newnode->next = prev->next;prev->next = newnode;}else         //继续遍历{prev = prev->next;}}}
}
void SLTErase(SLTNode** pphead, int i)   //删除第i个结点
{assert(pphead && *pphead);assert(i >= 0);if (i == 0)   //如果要删除头结点{SLTNode* next = (*pphead)->next;free(*pphead);*pphead = next;}else{SLTNode* p = *pphead;while (p->next != NULL && i--)    //利用短路特点,使得如果删除最后的NULL失败{if (i == 0){SLTNode* next = p->next;p->next = p->next->next;free(next);}else{p = p->next;}}if (i > 0){printf("该结点不存在\n");}}
}
void SLTFind1(SLTNode* phead,int i)         //查找第i个位置的值
{assert(phead);SLTNode* p = phead;while (i-- && p!=NULL){p = p->next;}if (p != NULL){printf("第i个的值为:%d\n", p->data);}else{printf("不存在第i个的值");}}
void SLTFind2(SLTNode* phead, SLTDataType y)     //查找y这个值的位置
{SLTNode* pcur = phead;int index = 0;while (pcur){if (pcur->data == y){printf("下标值为%d\n", index);return;}pcur = pcur->next;index++;}printf("没找到\n");
}
void SListDesTroy(SLTNode** pphead)    //销毁链表
{assert(pphead && *pphead);       //避免传入空的二级指针和空链表SLTNode* pcur = *pphead;while (pcur) {SLTNode* next = pcur->next;free(pcur);pcur = next;}*pphead = NULL;    //避免成为野指针
}
int main()
{//(1)SLTNode* plist = NULL;int n = 0;printf("请输入单链表的指定长度:\n");scanf("%d", &n);for (int i = 0; i < n; i++){int x = 0;scanf("%d", &x);SLTPushFront(&plist, x);}PrintSLT(plist);//(2)printf("请输入要插入的下标i和元素x:\n");int i = 0, x = 0;scanf("%d%d", &i, &x);SLTInsert(&plist, i, x);PrintSLT(plist);//(3)printf("请输入要删除的下标i:\n");scanf("%d", &i);SLTErase(&plist, i);PrintSLT(plist);//(4)printf("请输入要查找的位置i:\n");scanf("%d", &i);SLTFind1(plist, i);//(5)printf("请输入要查找的元素y:\n");int y = 0;scanf("%d", &y);SLTFind2(plist, y);//(6)销毁链表,归还申请空间SListDesTroy(&plist);printf("链表已销毁\n");return 0;
}

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

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

相关文章

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-LSSVM鲸鱼算法优化…

【QT】ROS2 Humble联合使用QT教程

【QT】ROS2 Humble联合使用QT教程 文章目录 【QT】ROS2 Humble联合使用QT教程1. 安装ROSProjectManager插件2. 创建ROS项目3.一个快速体验的demoReference 环境的具体信息如下&#xff1a; ubunt 22.04ros2 humbleQt Creator 13.0.0ROS ProjectManager 13.0.0 本文建立在已经…

20.Nacos集群搭建

模拟Nacos三个节点&#xff0c;同一个ip,启动三个不同的端口&#xff1a; 节点 nacos1, 端口&#xff1a;8845 节点 nacos2, 端口&#xff1a;8846 节点 nacos3, 端口&#xff1a;8847 1.搭建数据库&#xff0c;初始化数据库表结构 这里我们以单点的数据库为例 首先新建一…

计算机网络—— book

文章目录 一、概述1.1互联网的核心部分1&#xff0e;电路交换的主要特点2&#xff0e;分组交换的主要特点 1.2.计算机网络的性能1&#xff0e;速率2&#xff0e;带宽3&#xff0e;吞吐量4&#xff0e;时延5&#xff0e;利用率 1.3.计算机网络体系结构协议与划分层次具有五层协议…

OpenHarmony语言基础类库【@ohos.util.LinkedList (线性容器LinkedList)】

LinkedList底层通过双向链表实现&#xff0c;双向链表的每个节点都包含对前一个元素和后一个元素的引用。当需要查询元素时&#xff0c;可以从头遍历&#xff0c;也可以从尾部遍历&#xff0c;插入、删除效率高&#xff0c;查询效率低。LinkedList允许元素为null。 LinkedList…

模拟信号的离散化

本文介绍模拟信号的离散化。 1.采样定理 定义&#xff1a;若想重建输入的模拟信号&#xff0c;采样频率必须大于等于输入模拟信号最高频率的2倍&#xff0c;即&#xff1a; 其中&#xff0c;为采样频率&#xff0c;为输入模拟信号最高频率 否则&#xff0c;信号会发生混叠 2…

基于JSP+Mysql+HTml+Css鲜花水果购物商城系统设计与实现

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

selenium入门篇(环境搭建、八大定位)

背景 Web自动化测现状 1. 属于 E2E 测试 2. 过去通过点点点 3. 好的测试&#xff0c;还需要记录、调试网页的细节 一、selenium环境搭建 一键搭建 pip3 install webdriver-helper 安装后自动的完成&#xff1a; 1. 查看浏览器的版本号 2. 查询操作系统的类型 …

每年首版次测试报告的要求有哪些?

每年首版次测试报告的要求可能因不同的地区、行业或产品而有所差异&#xff0c;但一般而言&#xff0c;它们通常遵循一些基本的标准和原则。以下是一些常见的首版次测试报告要求&#xff1a; 完整性&#xff1a;测试报告应包含所有必要的测试内容&#xff0c;包括但不限于测试…

dwc3控制器是怎么处理otg

概念 在OTG中&#xff0c;初始主机设备称为A设备&#xff0c;外设称为B设备。可用电缆的连接方式来决定初始角色。两用设备使用新型Mini-AB插座&#xff0c;从而使Mini-A插头、Mini-B插头和Mini-AB插座增添了第5个引脚&#xff08;ID&#xff09;&#xff0c;以用于识别不同的…

没有文件服务器,头像存哪里合适

没有文件服务器&#xff0c;头像存哪里合适 视频在bilibili&#xff1a;没有文件服务器&#xff0c;头像存哪里合适 1. 背景 之前有同学私信我说&#xff0c;他的项目只是想存个头像&#xff0c;没有别的文件存储需求&#xff0c;不想去用什么Fastdfs之类的方案搭建文件服务…

记账本React案例(Redux管理状态)

文章目录 整体架构流程 环境搭建 创建项目 技术细节 一、别名路径配置 1.路径解析配置&#xff08;webpack&#xff09; &#xff0c;将/解析为src/ 2.路径联想配置&#xff08;vsCode&#xff09;&#xff0c;使用vscode编辑器时&#xff0c;自动联想出来src文件夹下的…