C语言学历历程(十三)结构体与链表结合编写“增删改查”

2023-05-16

#include <*stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct student)*

struct student
{
long num;
float score;
struct student *next;
}; //首先定义了一个结构体;

struct student *create() //创造一个输入信息的函数体
{
struct student *p1,*p2,*head; //申明结构体指针变量;
int num;
float score;
int n = 0;

head = NULL;

p1 = p2 =(struct student *)malloc(LEN);    //输入常量信息,并且想要后面修改这些常量,必须申请动态内存,使用malloc来申请动态内存;

printf("please input num and score.\n");
scanf("%d,%f",&p1->num,&p1->score);

while(p1->num != 0)          //用0来控制结束;
{
    n++;
    if(n == 1)
        head = p1;
    else p2->next = p1;
    p2 = p1;
    p1 = (struct student*)malloc(sizeof(struct student));  //每次输入下一组信息时,再次给malloc申请动态内存,此时的p1和前一个p1不一样;
    printf("please input num and score.\n");
    scanf("%d,%f",&p1->num,&p1->score);
}

p2->next = NULL;
return head;

}
void printflist(struct student *head) //打印链表,将内容打印,即“查”;
{
struct student *p;
p=head;
if(head != NULL)
{
do{
printf(“num = %d score = %f\n”,p -> num,p -> score);
p = p -> next;

    }while(p != NULL);
}

}
/*while(p != NULL)
* {
printf(“num = %d,score = %f\n”,p -> num, p -> score);
p = p -> next;
* }*/
struct student *delete(struct student *head,int num) //删除函数;
{
printf(“delete.\n”);
struct student *p1,*p2;
if(head == NULL)
{
printf(“The List is NULL\n”);
}
else
{
p1 = head;
while(p1 -> next != NULL && p1 -> num != num)
{
p2 = p1;
p1 = p1 -> next;
}
if(p1 -> num == num)
{
if(p1 == head)
head =p1 -> next;
else
p2 -> next = p1 -> next; //这里是删除其实并没有删除节点,而是跳过了这个节点;
}
else
printf(“Can not find list num.\n”);
}
return head;
}

struct student *change(struct student *head,int index,int num,float score)
{
printf(“change.\n”);
struct student *p;
if(head == NULL)
{
printf(“The List is NULL.\n”);
}
else
{
p = head;
while(p -> next != NULL && p -> num != index)
{
p = p -> next;
}
if(p -> num == index)
{
p ->num = num;
p ->score =score;
}
else
printf(“Can not fine list index.\n”);
}
return head;
}

struct student *add(struct student *head,int index,int num,float score)
{
printf(“add.\n”);
struct student *p1,*p2,*p3;
if(head == NULL)
{
printf(“The List is NULL.\n”);
}
else
{
p1 = p2 = head;
while(p1 -> next != NULL && p1 -> num != index)
{
p1 = p1 -> next;
p2 = p1;
}
if(p1 -> num ==index)
{
p3 = (struct student *)malloc(LEN);
p3 -> num = num;
p3 -> score = score;
if(p2 -> next == NULL)
{
p2 -> next = p3;
p3 -> next = NULL;
}
else
{
p3 -> next = p2 -> next;
p2 -> next = p3;
}
}
else
printf(“Can not find list index.\n”);
return head;
}

}

int main()
{
struct student *head;
head = create();
printflist(head);
delete(head,3);
printflist(head);
change(head,2,5,25);
printflist(head);
add(head,3,3,35);
printflist(head);

return 0;

}

这个是一个简单的增删改查的链表与结构体程序,作为新手来学习链表还是非常好的;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言学历历程(十三)结构体与链表结合编写“增删改查” 的相关文章

  • 跟涛哥一起学嵌入式 13:嵌入式学习三剑式

    前言 学习一门技术犹如修炼一门武功 在成为高手的路上 xff0c 无数英雄豪杰不尽相同 xff0c 按照武侠小说的套路 xff0c 大侠之所以成为大侠 xff0c 绝对不可能平平淡淡 xff0c 肯定有一段开挂的传奇人生 xff1a 要么被
  • 【C/C++】- STL(ing)

    目录 一 概述 二 模板 三 迭代器 1 什么是迭代器 例 1 为数组容器 链表容器编制共同显示函数 2 进一步理解迭代器 3 STL迭代器 xff08 1 xff09 输入迭代器 xff1a xff08 2 xff09 输出迭代器 xff
  • OpenStack 运维异常问题处理小结

    在OpenStack云平台运维过程中会遇到创建虚机 创建磁盘 删除磁盘和虚机过程中出现相关问题 xff0c 本篇针对运维过程中的一些问题做一些小结 xff0c 希望可以给云运维的你们提供一些帮助 问题1 创建磁盘提示error报错 root
  • 续集来了!我让 GPT-4 用 Laf 三分钟写了个完整的待办事项 App

    书接前文 xff0c 上篇文章我们教大家如何三分钟时间用 Laf 实现一个自己的 ChatGPT 一觉醒来 xff0c GPT 4 已经发布了 xff01 GPT 4 实现了真正的多模态 xff0c 可以把纸笔画的原型直接写出网页代码 读论
  • 【EtherCAT理论篇】二、EtherCAT工作原理

    1 EtherCAT系统组成 EtherCAT是一种实时以太网技术 xff0c 由一个主站设备和多个从站设备组成 主站设备使用标准的以太网控制器 xff0c 具有良好的兼容性 xff0c 任何具有网络接口卡的计算机和具有以太网控制的嵌入式设
  • 【EtherCAT分析】一、EtherCAT从站硬件分析

    1 EtherCAT从站控制芯片 EtherCAT从站控制芯片ESC是实现EtherCAT数据链路层协议的核心 xff0c 它处理EtherCAT数据帧 xff0c 并提供数据接口 从站控制器通常都有一个内部的DPRAM xff0c 并提供
  • 【EtherCAT实践篇】六、更改XML,增加输入输出变量

    目的 xff1a 在EtherCAT开发板上IO程序 xff08 基于SSC的IO通讯 xff09 基础上进行修改 xff0c 实现16路拨码开关输入 xff0c 以及16路LED输出 EtherCAT从站增加变量的操作包括两个部分 xff
  • 【SOEM主站】一、SOEM主站环境搭建及连接板子测试

    目的 xff1a 在windows环境下搭建SOEM主站 xff0c 并利用SOEM自带例程测试EtherCAT板子从站板通讯效果 1 SOEM主站环境搭建 xff08 1 xff09 安装VS xff1a 我这里安装的是VS2017 xf
  • 【EtherCAT实践篇】七、更改XML示例2,增加16位模拟输入

    目的 xff1a 在EtherCAT开发板上IO程序基础上增加一个16位的变量mytest xff0c 用于传输模拟量发送给主站 1 EtherCAT增加变量说明 在实际使用中 xff0c 可现有程序的输入输出变量可能不能直接满足实际需求
  • 【EtherCAT实践篇】八、更改XML示例3,增加16位模拟DAC输出

    目的 xff1a 在EtherCAT开发板上IO程序 xff08 基本IO通讯 基于SSC xff09 基础上进行修改 xff0c 增加一路模拟量输出 xff0c 并输出给DAC管脚 由于STM32F405底板具有DAC输出功能 xff0c
  • Pixhawk固件PX4之串口通讯

    1 目的 为进一步扩展pixhawk的接口及功能 xff0c 通过pixhawk现有接口 xff08 串口 I2C等 xff09 连接外部设备来实现 xff0c 本节内容主要介绍串口通讯方式 2 测试平台 硬件 xff1a pixhawk
  • 手机充电原理分析及问题总结

    xff08 1 xff09 充电流程介绍 xff1a 当充电器插入时 xff0c 亦即为PMIC充电模块提供了Vcharge电压 xff0c 这时会产生一个充电中断信号到CPU xff0c 通知CPU现在已经进入充电状态 CPU开始启动如下
  • 串口接收不定长数据的几种方法

    串口作为单片机开发的一个常用的外设 xff0c 应用范围非常广 大部分时候 xff0c 串口需要接收处理的数据长度是不定的 那么怎么才能判断一帧数据是否结束呢 xff0c 今天就以STM32单片机为例 xff0c 介绍几种接收不定长数据的方
  • 删除分节符的技巧

    WORD中删除分节符有这样的规定 xff1a 如果要删除分节符 xff0c 只要把光标移动到该分节符上 xff0c 按Delete键即可 但是要注意该分节符前面的文字将合并到后面的节中 xff0c 并且采用后者的格式设置 我就不知道天杀的微
  • 虚机创建异常报错No valid host was found,There are not enough hosts available

    虚机创建异常 xff0c 使用nova show 虚机ID提示fault报错信息 xff1a No valid host was found xff0c There are not enough hosts available 检查所在宿主
  • vuzzer 具体原理解析

    目录 1 安装 vmware 15 01环境下安装 xff1a 2 vuzzer使用说明 3 vuzzer原理 3 1权重文件以及有着cmp信息的文件生成 3 2 vuzzer种子生成 xff0c 变异原理 3 2 1 runfuzz py
  • C++ unordered_set

    目录 1 定义 2 基本的函数 2 1 unordered set构造 2 2 添加新的元素 注意无法插入相同元素 2 3 查找元素 2 4 查找桶接口 2 5 观察器 2 6 清除元素 2 7 其他函数 1 定义 unordered se
  • clang 10 介绍——sanitizerCoverage

    1 Introduction llvm内置了一个简单的代码覆盖率检测 xff08 sanitizercoverage xff09 它在函数级 基本块级和边缘级插入对用户定义函数的调用 提供了这些回调的默认实现 xff0c 并实现了简单的覆盖
  • C++ 匿名函数

    1 定义 所谓匿名函数 xff0c 其实类似于python中的lambda函数 xff0c 其实就是没有名字的函数 使用匿名函数 xff0c 可以免去函数的声明和定义 这样匿名函数仅在调用函数的时候才会创建函数对象 xff0c 而调用结束后
  • 给docker中的ubuntu系统安装桌面程序

    原本服务器是centos的 xff0c 用的不是很习惯 xff0c 也为了可以分割功能 xff0c 于是在服务器上装了docker xff0c docker里装了ubuntu系统 xff0c 具体过程可以参见https blog csdn

随机推荐