数据结构--单链表创建、增删改查功能以及与结构体合用
一、作业要求
单链表操作,要求节点是结构体类型,实现以下功能:
1.尾插学生
2.任意位置插入学生
3.任意位置删除学生
4.逆置单链表
5.学生按学号排序
6.销毁单链表
二、实现过程
1.代码如下:
(1)头文件创建
#ifndef _LINK_L_ #define _LINK_L_ #include <myhead.h> //学生信息结构体 typedef struct {int id;char name[20]; }stu,*Stu; //单链表结构体 typedef struct Link {union {int len;stu xs;};struct Link *next; }links,*Plink; //创建头节点 Plink create(); //尾插法 int rear_insert(Plink,stu); //输出函数 int output_link(Plink); //学生信息输入 Stu input_stu(Stu); //任意位置插入 int anypos_insert(Plink,int,Stu); //任意位置删除 int anypos_delete(Plink,int); //单链表逆置 int rev_stulink(Plink); //按学号排序 int id_sort(Plink); //单链表销毁 int link_destroy(Plink); #endif
(2)主函数编写
#include "link.h" int main(int argc, const char *argv[]) {int n,pos;Stu s=NULL;Stu sp=NULL;Plink L=create();//学生信息管理系统结构while(1){printf("\t++++++学生管理系统++++++++++\n");printf("\t\t1、尾插法\n");printf("\t\t2、任意位置插入信息\n");printf("\t\t3、任意位置删除信息\n");printf("\t\t4、单链表逆置\n");printf("\t\t5、学生学号排序\n");printf("\t\t6、销毁链表退出系统\n");printf("\n");int cz=0;printf("请输入操作数:");scanf("%d",&cz);switch(cz){case 1://尾插法printf("请输入学生个数:");scanf("%d",&n);s=malloc(sizeof(stu)*n);for(int i=0;i<n;i++){printf("请输入学生信息:");scanf("%d %s",&s[i].id,s[i].name);}for(int i=0;i<n;i++){rear_insert(L,s[i]);}output_link(L);break;case 2://任意位置插入printf("请输入要插入位置:");scanf("%d",&pos);sp=input_stu(sp);anypos_insert(L,pos,sp);output_link(L);break;case 3://任意位置删除printf("请输入要删除位置:");scanf("%d",&pos);anypos_delete(L,pos);output_link(L);break;case 4://单链表逆置rev_stulink(L);output_link(L);break;case 5:id_sort(L);output_link(L);break;case 6://销毁单链表并退出程序link_destroy(L);return 0;}}return 0; }
(3)功能函数编写
#include "link.h" Plink create() {Plink L=malloc(sizeof(links));if(L==NULL){printf("创建头节点失败\n");return NULL;}L->next=NULL;L->len=0;printf("创建成功\n");return L; } //任意位置删除 int anypos_delete(Plink L,int pos) {if(L==NULL||pos<1||pos>L->len){printf("删除失败\n");return -1;}Plink t=L;//t指针移至指定节点的前驱for(int i=1;i<pos;i++)t=t->next;//p指针指向要删除节点Plink p=t->next;//t指针链接要删除节点的后一节点t->next=t->next->next;//长度-1L->len--;//释放p节点free(p);p=NULL;return 0; } //单链表逆置 int rev_stulink(Plink L) {if(L==NULL||L->len<1){printf("逆置失败\n");return -1;}//Q指针指向头节点下一节点Plink Q=L->next;//t指向Q的下一节点Plink t=Q->next;//后移直到next指向空while(Q->next!=NULL){//Q指针指向t节点下一节点//单拎t节点Q->next=t->next;//t节点放到头节点之后t->next=L->next;//头节点链接t节点L->next=t;//再次将t指针指向Q节点的下一节点t=Q->next;}return 0; } //按学号排序 int id_sort(Plink L) {Plink j=L;//遍历次数for(int i=1;i<L->len;i++){//指针指向头节点后一节点//后移直到j指针的next为空for(j=L->next;j->next!=NULL;j=j->next){//判断学号大小if(j->xs.id>j->next->xs.id){//结构体内容交换stu temp=j->xs;j->xs=j->next->xs;j->next->xs=temp;}}}return 0; } //尾插法 int rear_insert(Plink L,stu s) {if(L==NULL){printf("插入失败\n");return -1;}Plink t=L;for(int i=0;i<L->len;i++)t=t->next;Plink p=malloc(sizeof(links));p->xs.id=s.id;strcpy(p->xs.name,s.name);p->next=NULL;t->next=p;L->len++;return 0; } //输出函数 int output_link(Plink L) {if(L==NULL){printf("该链表为空\n");return -1;}Plink t=L;for(int i=0;i<L->len;i++){t=t->next;printf("学号:%d\t姓名:%s\n",t->xs.id,t->xs.name);}printf("\n");return 0; } //学生信息输入 Stu input_stu(Stu s) {s=malloc(sizeof(stu));printf("请输入学生信息:");scanf("%d %s",&s->id,s->name);return s; } //任意位置插入 int anypos_insert(Plink L,int pos,Stu s) {if(L==NULL||pos<1||pos>L->len+1){printf("插入失败\n");return -1;}Plink t=L;for(int i=1;i<pos;i++)t=t->next;Plink p=malloc(sizeof(links));p->xs.id=s->id;strcpy(p->xs.name,s->name);p->next=t->next;t->next=p;L->len++;return 0;} //销毁单链表 int link_destroy(Plink L) {//链表为空销毁失败if(L==NULL){printf("销毁失败\n");return -1;}//t指针指向单链表Plink t=L;while(L!=NULL){//t指针后移t=t->next;//从头节点开始释放free(L);//指向tL=t;}printf("销毁成功\n");return 0; }
2.运行结果如图所示:
(1)尾插法插入学生信息
(2)任意位置插入学生信息
(3)任意位置删除学生信息
(4)单链表逆置
(5)按学号给学生排序
(6)销毁单链表并退出系统
相关文章:
数据结构--单链表创建、增删改查功能以及与结构体合用
一、作业要求 单链表操作,要求节点是结构体类型,实现以下功能: 1.尾插学生 2.任意位置插入学生 3.任意位置删除学生 4.逆置单链表 5.学生按学号排序 6.销毁单链表 二、实现过程 1.代码如下: (1)头…...
开源ids snort (windows版)
Snort-IPS-on-Windows-main资源-CSDN文库 GitHub - eldoktor1/Snort-IPS-on-Windows: A comprehensive guide to installing and configuring Snort IPS on Windows, ensuring robust network security 手动打造Snortbarnyard2BASE可视化告警平台 - FreeBuf网络安全行业门户 …...
关于 vue3 axios的封装,并发请求相关
简介 Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 请求方法别名 为了方便起见&#x…...
cpp中的namespace详解
namespace的作用主要是为了避免名字冲突和组织代码。 命名空间在C中是一个非常重要的特性,它帮助开发者更好地管理代码和避免潜在的冲突。 具体来说,它有以下几个主要用途 避免名字冲突 在大型项目中可能会有很多个类、函数或变量使用相同的名称。使用…...
request库的使用 | get请求
requests 库的 get 方法用于发送 HTTP GET 请求。GET 请求通常用于请求服务器发送数据。 1、导入 requests 库: import requests 2、发送 GET 请求: 使用 requests.get() 方法发送请求。 response requests.get(urlhttp://www.jd.com) 3、查看响应…...
理想低通信道和理想带通信道的区别
一、定义与特性 理想低通信道(可通过<MAX): 定义:理想低通信道允许信号的所有低频分量,只要其频率不超过某个上限值,都能够不失真地通过此信道。而频率超过该上限值的所有高频分量都不能通过该信道。特…...
LAMP架构搭建
目录 LAMP架构搭建 编译安装Apache httpd服务 1、需要的安装包 2、关闭防火墙和核心防护 3、安装环境依赖包 4、配置软件模块 5、编译及安装 6、优化配置文件路径(可不做) 7、添加httpd系统服务 8、修改httpd 服务配置文件 9、浏览器访问验证…...
RT-DETR
SSE represents the single-scale Transformer encoder,CSF represents cross-scale fusion. AIFI and CCFF are the two modules designed into 作者的 hybrid encoder 截止到发文时间的issue数,多吓人呐,不建议复现...
【算法——KMP】
1理解next数组定义:最长相等前后缀(不含当前字符并且不能是整体) 算法讲解100【扩展】 KMP算法原理和代码详解_哔哩哔哩_bilibili next数组的值:假设这个i出现了不匹配就从next[i]的位置开始在再匹配 2next数组生成 看一下是怎…...
视频监控相关笔记
一、QT 之 QTreeWidget 树形控件 Qt编程指南,Qt新手教程,Qt Programming Guide 一个树形结构的节点中的图表文本 、附带数据的添加: QTreeWidgetItem* TourTreeWnd::InsertNode(NetNodeInfo node, QTreeWidgetItem* parent_item) { // …...
React 中,构建组件的方式
1. 函数组件(Function Components) 函数组件是最简单的组件形式,通常用于展示性的组件,不涉及复杂的生命周期方法。 import React from react;function Welcome(props) {return <h1>Hello, {props.name}</h1>; }exp…...
Android开发高频面试题之——Android篇
Android开发高频面试题之——Android篇 Android开发高频面试题之——Java基础篇 Android开发高频面试题之——Kotlin基础篇 Android开发高频面试题之——Android基础篇 1. Activity启动模式 standard 标准模式,每次都是新建Activity实例。singleTop 栈顶复用。如果要启动的A…...
禁用拷贝构造函数和赋值构造函数
在C中,禁用拷贝构造函数和拷贝赋值操作符的方式通常是为了防止类的对象被意外复制,这对于那些管理独占资源或不应被复制的对象尤为重要。 class LatActiveControlState : public LatState { public:LatActiveControlState() : LatState(LatS_ActiveCont…...
OneDrive for Business with Office Online 部署方案
目录 前言 部署准备 需求分析 用户需求 技术需求 环境准备 硬件要求 软件要求 许可计划 OneDrive for Business 部署 前期准备 域名配置 Azure AD 配置 安装与配置 安装 OneDrive 同步客户端 配置 OneDrive 组策略 数据迁移 Office Online 部署 前期准备 安…...
win10 win11 设置文件权限以解决Onedrive不能同步问题
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
Unity DOTS系列之IJobChunk来迭代处理数据
最近DOTS发布了正式的版本, 我们来分享一下System中如何在System中使用IJobChunk来迭代处理World中的数据,方便大家上手学习掌握Unity DOTS开发。 再回顾一次基于ArcheType Chunk内存管理 我们先再次回顾以下基于ArcheType的Chunk内存管理。每一类Entity都是由一些…...
哈希——哈希表
回顾/本期梗概 上期我们学习了哈希——字符串哈希(空降链接),本期我们将学习哈希中的哈希表。 1、哈希表原理 (1)使用数组下标直接标记元素 哈希表(也叫数列表):是一种高效的、通过把…...
简单了解 JVM
目录 ♫什么是JVM ♫JVM的运行流程 ♫JVM运行时数据区 ♪虚拟机栈 ♪本地方法栈 ♪堆 ♪程序计数器 ♪方法区/元数据区 ♫类加载的过程 ♫双亲委派模型 ♫垃圾回收机制 ♫什么是JVM JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。 虚拟机是指通过软件模…...
已经30岁了,想转行从头开始现实吗?什么样的工作算好工作?
我是29岁那年,完成从转行裸辞副业的职业转型。 如果你把职业生涯看成是从现在开始30岁,到你退休那年,中间这么漫长的30年,那么30岁转行完全来得及; 如果你觉得必须在什么年纪,什么时间内必须完成赚到几十…...
快速理解docker(一)docker 简介
在当今快速迭代的软件开发环境中,如何高效地部署、管理和扩展应用程序成为了开发者们面临的重大挑战。Docker,作为一款开源的容器化平台,凭借其轻量级、可移植性和易于部署的特性,迅速成为了解决这些挑战的热门选择。本文将带您走…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...





