c语言-链表习题

1.尾插法 Q6544

涉及:
(1)创建链表

struct stu* createList() {
    struct stu *head = NULL, *tail = NULL, *newNode;
    char choice;
    char name[20];
    float price;
    do {
        printf("请输入书名 价格:\n");
        scanf("%s %f", name, &price);
        newNode = (struct stu*)malloc(sizeof(struct stu));
        if (newNode == NULL) {
            printf("内存分配失败\n");
            return NULL;
        }
        strcpy(newNode->name, name);
        newNode->price = price;
        newNode->next = NULL;
        if (head == NULL) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
        printf("是否继续输入,按Y键继续输入,其他键就结束.\n");
        scanf(" %c", &choice);
    } while (choice == 'Y' || choice == 'y');
    return head;
}

往链表里一个个添加节点同理,需要注意如果是在主函数中定义的LinkList,且创建链表函数不返回结点指针的话(为void),需要传头结点的地址(尽量不用,用createList返回指针是更容易实现的。),如Q6502

int main()
{
    int choice;
    struct stu *head=NULL,*tail=NULL;
    do{
        printf("1  增加数据\n");
        printf("2  退出\n");
        printf("选择:");
        scanf("%d",&choice);
        if(choice==1){
            Append(&head,&tail);
        }
    }while(choice!=2);
    DisLink(head);
    DeleteMemory(head);
    return 0;
}
void Append(struct stu **head,struct stu **tail){
    struct stu* newNode;
    newNode=(struct stu*)malloc(sizeof(struct stu));
    if(newNode==NULL){
        printf("内存分配失败\n");
        return;
    }
    printf("请输入学号:");
    scanf("%s",newNode->ID);
    printf("请输入名字:");
    scanf("%s",newNode->name);
    printf("请依次输入语文,数学,外语成绩:");
    scanf("%d %d %d",&newNode->c1,&newNode->c2,&newNode->c3);
    newNode->next=NULL;
    if((*head)==NULL){
        (*head)=newNode;
        (*tail)=newNode;
    }
    else{
        (*tail)->next=newNode;
        (*tail)=newNode;
    }
}

(2)查找最大值

void printMostExpensive(struct stu *head) {
    if (head == NULL) {
        return;
    }
    struct stu *max = head;
    struct stu *current = head->next;
    while (current!= NULL) {
        if (current->price > max->price) {
            max = current;
        }
        current = current->next;
    }
    printf("result:\n");
    printf("%s %.2f\n", max->name, max->price);
}

(3)释放内存

void freeList(struct stu *head) {
    struct stu *temp;
    while (head!= NULL) {
        temp = head;
        head = head->next;
        free(temp);
    }
}

在这里插入图片描述
全部代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义结构体
struct stu {
    char name[20];
    float price;
    struct stu *next;
};

// 创建链表函数
struct stu* createList() {
    struct stu *head = NULL, *tail = NULL, *newNode;
    char choice;
    char name[20];
    float price;
    do {
        printf("请输入书名 价格:\n");
        scanf("%s %f", name, &price);
        newNode = (struct stu*)malloc(sizeof(struct stu));
        if (newNode == NULL) {
            printf("内存分配失败\n");
            return NULL;
        }
        strcpy(newNode->name, name);
        newNode->price = price;
        newNode->next = NULL;
        if (head == NULL) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
        printf("是否继续输入,按Y键继续输入,其他键就结束.\n");
        scanf(" %c", &choice);
    } while (choice == 'Y' || choice == 'y');
    return head;
}

// 输出最贵书籍信息函数
void printMostExpensive(struct stu *head) {
    if (head == NULL) {
        return;
    }
    struct stu *max = head;
    struct stu *current = head->next;
    while (current!= NULL) {
        if (current->price > max->price) {
            max = current;
        }
        current = current->next;
    }
    printf("result:\n");
    printf("%s %.2f\n", max->name, max->price);
}

// 释放链表内存函数
void freeList(struct stu *head) {
    struct stu *temp;
    while (head!= NULL) {
        temp = head;
        head = head->next;
        free(temp);
    }
}

int main() {
    struct stu *head = createList();
    printMostExpensive(head);
    freeList(head);
    return 0;
}
/*
Algorithms 105
Y
高等数学 31.5
Y
C语言 35
J

*/

2.排序 test3

在这里插入图片描述

(1)利用选择排序的方法,降序排序

void descLinkList(Student* head){
    Student *i,*j;
    int tempID;
    char tempName[10];
    float tempScore;
    for(i=head;i!=NULL;i=i->pNextNode){
        for(j=i->pNextNode;j!=NULL;j=j->pNextNode){
            if(i->score<j->score){
                tempID=i->ID;
                i->ID=j->ID;
                j->ID=tempID;
                strcpy(tempName,i->name);
                strcpy(i->name,j->name);
                strcpy(j->name,tempName);
                tempScore=i->score;
                i->score=j->score;
                j->score=tempScore;
            }
        }
    }
}

3.头插法 Q6815

建立带头结点的两个链表哦

void reverse_print(struct ListNode *head){
    struct ListNode *head2=(struct ListNode *)malloc(sizeof(struct ListNode));//链表2的头结点
    head2->next=NULL;
    struct ListNode *p;
    while(head->next!=NULL){
        p=head->next;
        head->next=head->next->next;
        p->next=head2->next;
        head2->next=p;
    }
    head->next=head2->next;
    free(head2);
    
    while(head->next!=NULL){//print
        printf("%d\n",head->next->val);
        head->next=head->next->next;
    }
}

4.遍历链表不许破坏链表结构

错误代码:head->next=head->next->next;破坏了链表结构,导致后续无法再使用该链表。

void show(struct goods *head){
    printf("head2 address is %p\n",head);
    printf("输出所有商品信息为:编号 类型 名称 数量:\n");
    while(head->next!=NULL){
        printf("%d %s %s %d\n",head->next->num,head->next->type,head->next->name,head->next->counts);
        head->next=head->next->next;
    }
}

正确代码:

void show(struct goods *head){
    printf("输出所有商品信息为:编号 类型 名称 数量:\n");
    struct goods *p=head->next;
    while(p!=NULL){
        printf("%d %s %s %d\n",p->num,p->type,p->name,p->counts);
        p=p->next;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云一键部署DeepSeek-V3、DeepSeek-R1模型

目录 支持的模型列表 模型部署 模型调用 WebUI使用 在线调试 API调用 关于成本 FAQ 点击部署后服务长时间等待 服务部署成功后&#xff0c;调用API返回404 请求太长导致EAS网关超时 部署完成后&#xff0c;如何在EAS的在线调试页面调试 模型部署之后没有“联网搜索…

Springboot集成Spring AI和Milvus,验证RAG构建过程

在当今信息爆炸的时代&#xff0c;如何高效地管理和利用海量的知识数据成为了企业和开发者面临的重大挑战。基于AI的大模型和检索增强生成&#xff08;RAG, Retrieval-Augmented Generation&#xff09;技术为这一难题提供了全新的解决方案。通过结合向量数据库、Embedding技术…

用React实现一个登录界面

使用React来创建一个简单的登录表单。以下是一个基本的React登录界面示例&#xff1a; 1. 设置React项目 如果你还没有一个React项目&#xff0c;你可以使用Create React App来创建一个。按照之前的步骤安装Create React App&#xff0c;然后创建一个新项目。 2. 创建登录组…

Python爬虫实战:股票分时数据抓取与存储 (1)

在金融数据分析中&#xff0c;股票分时数据是投资者和分析师的重要资源。它能够帮助我们了解股票在交易日内的价格波动情况&#xff0c;从而为交易决策提供依据。然而&#xff0c;获取这些数据往往需要借助专业的金融数据平台&#xff0c;其成本较高。幸运的是&#xff0c;通过…

通过BingAPI爬取Bing半个月内壁纸

通过BingAPI爬取Bing半个月内壁纸 一、前言二、爬虫代码三、代码说明 一、前言 爬取Bing搜索网站首页壁纸的方式主要有两种&#xff0c;第一种为间接爬取&#xff0c;即并不直接对Bing网站发起请求&#xff0c;而是对那些收集汇总了Bing壁纸的网站发起请求&#xff0c;爬取图片…

matlab汽车动力学半车垂向振动模型

1、内容简介 matlab141-半车垂向振动模型 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

在Ubuntu24.04上安装Stable-Diffusion1.10.1版本

之前曾介绍过在Ubuntu22.04上安装Stable-Diffusion&#xff1a; 在Ubuntu22.04上部署Stable Diffusion_ubuntu stable dif-CSDN博客 这个安装我们使用conda python虚拟机。这次我们介绍的是在Ubuntu24.04安装Stable-Diffusion的最新版本V1.10.1&#xff08;截止到今天最新版&…

功能测试与接口测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的…

IDEA集成DeepSeek

使用版本: IDEA 2024.3&#xff0c;Python3.11 通过CodeGPT插件安装&#xff1a; 1. 安装Python环境&#xff0c;安装完成后python --version验证是否成功 2. DeepSeek官网获取API Key 3. IDEA中安装CodeGPT插件 文件->设置->插件&#xff0c;搜"CodeGPT" …

DeepSeek笔记(二):DeepSeek局域网访问

如果有多台电脑&#xff0c;可以通过远程访问&#xff0c;实现在局域网环境下多台电脑共享使用DeepSeek模型。在本笔记中&#xff0c;首先介绍设置局域网多台电脑访问DeepSeek-R1模型。 一、启动Ollama局域网访问 1.配置环境变量 此处本人的操作系统是Windows11&#xff0c;…

计算机视觉-OpenCV图像处理

1.Matplotlib数据可视化&#xff08;绘制图像直方图、可视化矩阵&#xff09; # Matplotlib 数据可视化&#xff08;绘制图像直方图、可视化矩阵&#xff09; # 本节主要讲解如何使用 Matplotlib 绘制图像直方图和可视化矩阵。 # 1. 绘制图像直方图 # 2. 可视化矩阵# 1. 绘制图…

golangAPI调用deepseek

目录 1.deepseek官方API调用文档1.访问格式2.curl组装 2.go代码1. config 配置2.模型相关3.错误处理4.deepseekAPI接口实现5. 调用使用 3.响应实例 1.deepseek官方API调用文档 1.访问格式 现在我们来解析这个curl 2.curl组装 // 这是请求头要加的参数-H "Content-Type:…

闭源大语言模型的怎么增强:提示工程 检索增强生成 智能体

闭源大语言模型的怎么增强 提示工程 检索增强生成 智能体 核心原理 提示工程:通过设计和优化提示词,引导大语言模型进行上下文学习和分解式思考,激发模型自身的思维和推理能力,使模型更好地理解和生成文本,增强其泛用性和解决问题的能力。检索增强生成:结合检索的准确…

《计算机视觉》——角点检测和特征提取sift

角点检测 角点的定义&#xff1a; 从直观上理解&#xff0c;角点是图像中两条或多条边缘的交点&#xff0c;在图像中表现为局部区域内的灰度变化较为剧烈的点。在数学和计算机视觉中&#xff0c;角点可以被定义为在两个或多个方向上具有显著变化的点。比如在一幅建筑物的图像…

具身智能在智能巡检机器人中的应用——以开关柜带电操作机器人为例

随着机器人技术和人工智能的迅速发展&#xff0c;具身智能在各行业的应用日益广泛&#xff0c;尤其是在电力行业中的智能巡检领域。传统的电力巡检和维护工作通常需要人工操作&#xff0c;存在着高温、高压、强电磁场等危险环境&#xff0c;且效率较低。开关柜带电操作机器人作…

基于SpringBoot实现的大学社团平台系统实现功能八

一、前言介绍&#xff1a; 1.1 项目摘要 随着高校社团活动的日益丰富和多样化&#xff0c;学生对于社团管理和参与的需求也在不断增加。传统的社团管理方式往往存在效率低下、信息不透明等问题&#xff0c;无法满足现代学生对于便捷、高效社团管理的需求。因此&#xff0c;利…

Unity使用反射进行Protobuf(CS/SC)协议,json格式

protobuf生成的协议,有挺多协议的.利用反射生成dto进行伪协议的响应 和 发送请求 应用场景: 请求(CS)_后端先写完了(有proto接口了),前端还没搞完时(暂还没接入proto),后端可使用此请求,可自测 响应(SC)_可自行构建一个响应(有些特殊数据后端下发不了的),对数据进行测试 // 请…

使用synchronized解决高并发场景

synchronized能很好的解决高并发所带来的超卖等问题&#xff0c;但是synchronized也有属于它的缺陷&#xff0c;就是只适合单机模式&#xff0c;如果同时开启多个实例&#xff0c;那么还是会出现超卖的情况&#xff0c;下面就介绍一下synchronized使用方法&#xff0c;十分的简…

【Pytorch 库】自定义数据集相关的类

torch.utils.data.Dataset 类torch.utils.data.DataLoader 类自定义数据集示例1. 自定义 Dataset 类2. 在其他 .py 文件中引用和使用该自定义 Dataset torch_geometric.data.Dataset 类torch_geometric.data.Dataset VS torch.utils.data.Dataset 详细信息&#xff0c;参阅 tor…

Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网

| 线上研讨会时间&#xff1a;2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括&#xff1a;是否只需集成单一的工…