C语言程序设计之链表篇1

news2025/6/23 17:07:19

程序设计之链表1

  • 链表
  • 问题1_1
    • 代码1_1
    • 结果1_1
  • 问题1_2
    • 代码1_2
    • 结果1_2
  • 问题1_3
    • 代码1_3
    • 结果1_3

链表

        考查链表的数据结构,需利用指针变量才能实现,一个结点中应包含一个指针变量,用来存放下一个结点的地址。
        建立单向链表的一般步骤是:建立头指针 -> 建立第一个结点 -> 头指针指向第一个结点 -> 建立第二个结点 -> 头指针指向第二个结点
-> ··· -> 最后一个结点的指针指向 N U L L NULL NULL

问题1_1

        函数 f u n fun fun 的功能是:计算一个带头结点的单向链表中各结点的数据域中数值之和,结果作为函数返回值。

代码1_1

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

#define N 8

typedef struct list{
	int data;
	struct list* next;
}SLIST;

SLIST *creatlist(int*);
void outlist(SLIST*);

int fun(SLIST *h){
	SLIST *p;
	int s = 0;
	p = h->next;
	while(p){
		s += p->data;
		p = p->next;
	} 
	return s;
}

void main(void){
	SLIST *head;
	int a[N] = {12, 87, 45, 32, 91, 16, 20, 48};
	head = creatlist(a);
	outlist(head);
	printf("\nsum = %d\n", fun(head));
}

SLIST *creatlist(int a[]){
	SLIST *h, *p, *q;
	int i;
	h = p = (SLIST*)malloc(sizeof(SLIST));
	for(i=0; i<N; i++){
		q = (SLIST*)malloc(sizeof(SLIST));
		q->data = a[i];
		p->next = q;
		p = q;
	}
	p->next = 0;
	return h;
}

void outlist(SLIST *h){
	SLIST *p;
	p = h->next;
	if(p==NULL)
		printf("The list is NULL!\n");
	else{
		printf("\nHead ");
		do{
			printf("->%d", p->data);
			p = p->next;
		}
		while(p!=NULL);
		printf("->End\n");
	}
}

结果1_1

Result_1_1

问题1_2

        函数 f u n fun fun的功能是:删除链表中数据域值相同的结点,使得只保留一个。

代码1_2

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

#define N 8

typedef struct list{
	int data;
	struct list *next;
}SLIST;

void fun(SLIST *h){
	SLIST *p, *q;
	p = h->next;
	if(p!=NULL){
		q = p->next;
		while(q!=NULL){
			if(p->data==q->data){
				p->next = q->next;
				free(q);
				q = p->next;
			}
			else{
				p = q;
				q = q->next;
			}
		}
	}
}

SLIST *creatlist(int *a){
	SLIST *h, *p, *q;
	int i;
	h = p = (SLIST*)malloc(sizeof(SLIST));
	for(i=0; i<N; i++){
		q = (SLIST*)malloc(sizeof(SLIST));
		q->data = a[i];
		p->next = q;
		p = q;
	}
	p->next = 0;
	return h;
}

void outlist(SLIST *h){
	SLIST *p;
	p = h->next;
	if(p==NULL)
		printf("\nThe list is NULL!\n");
	else{
		printf("\nHead");
		do{
			printf("->%d", p->data);
			p = p->next;
		}while(p!=NULL);
	printf("->End\n");
	}
}

void main(void){
	SLIST *head;
	int a[N] = {1, 2, 2, 3, 4, 4, 4, 5};
	head = creatlist(a);
	printf("\nThe list before deleting:\n");
	outlist(head);
	fun(head);
	printf("\nThe list after deleting:\n");
	outlist(head);
}

结果1_2

Result_1_2

问题1_3

         N N N 名学生的成绩在主函数中放入一个带有头结点的链表结构中, h h h 指向链表的头结点。 函数 f u n fun fun的功能是:找出学生的最高分,并由函数值返回。

代码1_3

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

#define N 8

struct slist{
	double s;
	struct list* next;
};

typedef struct slist STREC;

double fun(STREC *h){
	double max = h->s;
	while(h!=NULL){
		if(max<h->s)
			max = h->s;
		h = h->next;
	}
	return max;
}

STREC* creat(double *s){
	STREC *h, *p, *q;
	int i = 0;
	h = p = (STREC *)malloc(sizeof(STREC));
	p->s = 0;
	while(i<N){
		q = (STREC *)malloc(sizeof(STREC));
		q->s = s[i];
		i++;
		p->next = q;
		p = q;
	}
	p->next = NULL;
	return h;   // 返回链表的首地址 
}

outlist(STREC *h){
	STREC *p;
	p = h->next;
	printf("head");
	do{
		printf("->2.0f", p->s);
		p = p->next;
	}while(p->next!=NULL);     // 输出各分数
	printf("\n\n"); 
}

void main(void){
	double s[N] = {85, 76, 69, 85, 91, 72, 64, 87}, max;
	STREC *h;
	h = creat(s);
	outlist(h);
	max = fun(h);
	printf("max=%6.1f\n", max);
}

结果1_3

Result_1_3

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu上安装anaconda创建虚拟环境(各种踩坑版)

之前都是在Windows桌面版进行深度学习的环境部署及训练&#xff0c;今天尝试了一下在Ubuntu上进行环境部署&#xff0c;踩了不少坑&#xff0c;提供一些解决办法给大家避雷。 目录 一、下载和安装anaconda 1. 下载 2. 安装 二、创建虚拟环境 一、下载和安装anaconda 1. …

项目管理工具-Maven

文章目录 Maven概述俩个经典的作用Maven 仓库 Maven 常用命令Maven 指令的生命周期Maven 的概念模型Maven 工程的认识 Maven概述 Maven 是一个项目管理工具&#xff0c;它包含了一个项目对象模型 (POM&#xff1a;Project Object Model)&#xff0c;一组标准集合&#xff0c;一…

记录一次Linux服务器被人使用SSH字典爆破

2024年1.20凌晨睡了一觉&#xff0c;早上起来用termux远程ssh登录小主机发现密码没法登录了&#xff0c;一直显示密码错误&#xff0c;到了晚上用电脑ssh连接小主机&#xff0c;发现小主机真的没法登录了&#xff0c;直接把小主机接上屏幕查看&#xff0c;发现密码被人修改了&a…

什么是Socket、Socket在Java中的应用、Socket和SocketChannel区别

目录 什么是Socket TCP\IP UDP体系结构 Socket和TCP\IP的关系 Socket在Java中的应用 Socket和SocketChannel的区别 SocketChannel和Selector的关系 服务器的设计演化历程---多线程版 服务器的设计演化历程---线程池版 服务器的设计演化历程---Selector版 参考链接 什么…

深度学习loss

pytorch模型训练demo代码 在PyTorch中&#xff0c;模型训练通常涉及几个关键步骤&#xff1a;定义模型、定义损失函数、选择优化器、准备数据加载器、编写训练循环。以下是一个简单的PyTorch模型训练演示代码&#xff0c;该代码实现了一个用于手写数字识别&#xff08;使用MNIS…

大数据——HBase原理

摘要 HBase 是一个开源的、非关系型的分布式数据库系统&#xff0c;主要用于存储海量的结构化和半结构化数据。它是基于谷歌的 Bigtable 论文实现的&#xff0c;运行在 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;之上&#xff0c;并且可以与 Hadoop 生态系统的其他组…

线程与进程的区别与联系,线程状态的切换

目录 什么是线程&#xff1f;进程&#xff1f;协程&#xff1f; 线程和进程的区别&#xff1f; 多线程的好处&#xff1a; 单核CPU有没有必要上多线程&#xff1f; 为什么没有变成单进程多线程的操作系统&#xff1f; 线程的状态 sleep &#xff08;&#xff09; 和wait&…

1.4 操作系统结构

操作系统的体系结构&#xff1a;操作系统的内核设计&#xff08;本节内容简要了解即可&#xff09; 宏内核 & 微内核 操作系统的内核 计算机系统的层次结构将操作系统部分更详细地划分为内核部分和非内核部分 宏内核 & 微内核 从操作系统的内核架构来划分&#xff…

【初阶数据结构篇】时间(空间)复杂度

文章目录 算法复杂度时间复杂度1. 定义2. 表示方法3. 常见时间复杂度4.案例计算分析冒泡排序二分查找斐波那契数列&#xff08;递归法&#xff09;斐波那契数列&#xff08;迭代法&#xff09; 空间复杂度案例分析冒泡排序斐波那契数列&#xff08;递归法&#xff09;斐波那契数…

【ACM独立出版,高录用】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)

2024年第四届物联网与机器学习国际学术会议&#xff08;IoTML 2024&#xff09;将于2024年8月23-25日在中国南昌召开。 会议将围绕着物联网和机器学习开展&#xff0c;探讨本领域发展所面临的关键性挑战问题和研究方向&#xff0c;以期推动该领域理论、技术在高校和企业的发展和…

yolov8标注细胞、识别边缘、计算面积、灰度值计算

一、数据标注 1. 使用labelme软件标注每个细胞的边界信息&#xff0c;标注结果为JSON格式 2. JSON格式转yolo支持的txt格式 import json import os import glob import os.path as osp此函数用来将labelme软件标注好的数据集转换为yolov5_7.0sege中使用的数据集:param jsonfi…

数据库技术深度解析与未来趋势展望

数据库技术深度解析与未来趋势展望 引言 在当今信息化高速发展的时代&#xff0c;数据库作为数据存储和管理的核心基础设施&#xff0c;扮演着至关重要的角色。无论是传统行业还是新兴的互联网领域&#xff0c;数据库的稳定性和性能直接影响到业务系统的运行效率和用户体验。本…

计算机基础-IO

一、裸机中的IO 我们先看下计算机的组成部分&#xff1a; 从图中我们很清楚的看到Input/Output 即为 IO&#xff0c;也就是计算机主机和外部设备进行信息的交换。 这种交换可能是磁盘IO也有可能是网络IO。 二、操作系统中的IO 操作系统分为内核态和用户态&#xff0c;且默认…

GPT-4o mini 震撼登场:开发者的新机遇与挑战

GPT-4o mini 震撼登场&#xff1a;开发者的新机遇与挑战 一、引言二、GPT-4o mini 模型的卓越性能三、极具竞争力的价格优势四、开发者的探索与实践五、提升开发效率和创新能力的策略六、面临的挑战与应对措施七、未来展望八、总结 在科技的浪潮中&#xff0c;OpenAI 最新推出的…

基于springboot+vue+uniapp的网上花店小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

概率论--置信区间和置信度

目录 置信区间 置信度 关系与权衡 置信区间的计算公式有哪些不同的变体&#xff0c;以及它们各自的适用情况是什么&#xff1f; 基于正态分布的置信区间&#xff1a; 基于t分布的置信区间&#xff1a; 单边置信区间&#xff1a; 如何根据不同的研究目的和数据类型选择合…

【React】详解自定义 Hook

文章目录 一、自定义 Hook 的基本用法1. 什么是自定义 Hook&#xff1f;2. 创建自定义 Hook3. 使用自定义 Hook 二、自定义 Hook 的进阶应用1. 处理副作用2. 组合多个 Hook3. 参数化 Hook4. 条件逻辑 三、自定义 Hook 的实际应用案例1. 实现用户身份验证2. 实现媒体查询 四、最…

【NPU 系列专栏 2.5 -- GPU 与 NPU 的区别】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 GPU 简介GPU 缺点NPU 特点NPU 应用场景NPU 与 GPU 的关系和区别NPU 与 GPU 区别GPU 简介 GPU 最初设计用于图形渲染和图像处理。近年来,由于其强大的并行计算能力,GPU 被广泛应用于通用计算领域,特别是深度学习和科学计算。…

堆的实现-适用于算法竞赛

首先讲一下能够实现的操作。 插入一个数查找最小值删除最小值删除任意一个元素修改任意一个元素 什么是堆&#xff1f; 堆其实是一棵完全二叉树。 即处理叶子节点和倒数第一层节点&#xff0c;其他节点都有两个子节点&#xff0c;而且顺序是从上到下&#xff0c;从左到右。 …

C# 简单的单元测试

文章目录 前言参考文档新建控制台项目新建测试项目添加引用添加测试方法测试结果(有错误)测试结果&#xff0c;通过正规的方法抛出异常 总结 前言 听说复杂的项目最好都要单元测试一下。我这里也试试单元测试这个功能。到时候调试起来也方便。 参考文档 C# 单元测试&#xf…