快速利用c语言实现线性表(lineList)
线性表是数据结构中最基本和简单的一个,它是n的相同类型数据的有序序列,我们也可以用c语言中的数组来理解线性表。
一、线性表声明
我们定义一个线性表的结构体,内部有三个元素:其中elem是一个指针,指向线性表的头,length记录线性表元素个数,listsize记录线性表的总长度。
//
// Created by 111 on 2024/11/15.
//#ifndef TEST1_LINELIST_H
#define TEST1_LINELIST_H#define OK 1
#define ERROR 0#define LIST_INIT_SIZE 30 //初始化线性表大小
#define LIST_INCREMENT 10 //线性表长度不够时,每次动态增加的长度typedef struct
{int *elem; //指向线性表的头int length; //线性表元素个数int listsize; //线性表总长度
}LineList;int initLineList(LineList *);int lineListInsert(LineList *,int,int);int lineListDelete(LineList *,int);int printLineList(LineList *);int freeLineList(LineList *);int lineListLocateElem(LineList *,int elem);#endif //TEST1_LINELIST_H
二、线性表初始化
我们通过初始化函数,进行线性表的空间申请,一开始我们申请可以存有30个元素的线性表,具体函数如下:
int initLineList(LineList *L)
{L->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int)); //动态申请堆空间,初始化30个元素if(!L->elem){printf("LineList allocate failed!"); //申请失败,提示错误,推出程序exit(ERROR);}L->length = 0; //记录元素个数L->listsize = LIST_INIT_SIZE; //记录线性表总大小return OK;
}
三、插入元素
插入元素我们通过指定位置进行插入,如果插入位置超过元素最大位置+1,则抛错;如果中间位置进行元素插入,我们则需要将后面的元素进行后移。

int lineListInsert(LineList *L,int i,int newelem)
{int *tmpaddr; //用来存放扩展后的线性表地址int *tmpdata; //用来存放临时元素的地址int *q;if(i<1||i>L->length+1) //如果超过位置,则报错return ERROR;if(L->length>=L->listsize){tmpaddr = (int *)realloc(L->elem,(L->listsize+LIST_INCREMENT)*sizeof(int));//元素个数超过线性表最大大小,则进行动态扩展if(!tmpaddr){printf("linesize reallocate failed!\n");exit(ERROR);}L->elem = tmpaddr;//线性表新地址L->listsize += LIST_INCREMENT;//线性表总大小该表}tmpdata =(L->elem+i-1);for(q = (L->elem+L->length-1);q>=tmpdata;--q) //从线性表最后一个元素开始,进行元素后移*(q+1) = *q; //插入元素*tmpdata = newelem;++L->length;return OK;
}
四、删除元素
删除一个元素后,我们需要将后续的元素进行前移动,确保线性表的连续:

int lineListDelete(LineList *L,int index)
{if(index<1||(index>L->length)) //错误的位置,返回ERROR{return ERROR;}int *tmpdel = L->elem+index; //临时存放删除元素的后一个元素int *mp = L->elem + L->length -1; //指向最后一个元素for(tmpdel;tmpdel<=mp;++tmpdel){ //从删除位置开始,进行元素前移*(tmpdel-1)= *tmpdel;}--L->length;return OK;}
五、元素定位
返回第一个匹配元素的位置,如果都不匹配,则返回0.
int lineListLocateElem(LineList *L,int elem)
{int i=1;int *p = L->elem;while(i<=L->length&&(*p++)!=elem)++i;if(i<=L->length)return i;elsereturn 0;
}
六、打印线性表
int printLineList(LineList *L)
{int *p = L->elem;for(int i =0 ;i<L->length;i++){printf("the %d element is %d\n",(i+1),*(L->elem+i));}return OK;
}
七、释放空间
int freeLineList(LineList *L)
{free(L->elem);return OK;
}
八、测试
我们在main函数中进行测试的编写,验证上述函数的功能。
int main() {LineList l;initLineList(&l);lineListInsert(&l,1, 10);lineListInsert(&l,2, 18);lineListInsert(&l,2,20);printLineList(&l);lineListDelete(&l,2);printf("after the linelist deleted.....\n");printLineList(&l);freeLineList(&l);return 0;
}

相关文章:
快速利用c语言实现线性表(lineList)
线性表是数据结构中最基本和简单的一个,它是n的相同类型数据的有序序列,我们也可以用c语言中的数组来理解线性表。 一、线性表声明 我们定义一个线性表的结构体,内部有三个元素:其中elem是一个指针,指向线性表的头&am…...
量子计算与人工智能的交汇:科技未来的新引擎
引言 在当今飞速发展的科技世界,人工智能(AI)和量子计算无疑是最受瞩目的两大前沿领域。人工智能凭借其在数据处理、模式识别以及自动化决策中的强大能力,已经成为推动各行业数字化转型的重要力量。而量子计算则通过颠覆传统计算机…...
51单片机使用NRF24L01进行2.4G无线通信
本文并不打算详细介绍NRF24L01的各个功能寄存器及指令的详细用法,因为网上都可以搜到很多非常详细的教程文档,这里只是介绍一些基本概念、用法以及代码的解释,旨在帮助新手能够快速上手调通快速使用。 基础概念 该模块使用的是SPI协议&…...
HelloMeme 上手即用教程
HelloMeme是一个集成空间编织注意力的扩散模型,用于生成高保真图像和视频。它提供了一个代码库,包含实验代码和预训练模型,支持PyTorch和FFmpeg。用户可以通过简单的命令行操作来生成图像和视频。 本文将详细介绍,如何在GPU算力租…...
自定义call方法和apply方法
自定义call方法 //Fn:要执行的函数,obj:函数中this的指向,args:剩余参数function call(Fn, obj, ...args) {//判断if (obj undefined || obj null) {obj globalThis; //全局对象 globalThis:es11新增的特性,用来指向…...
typescript中为js文件提供类型声明
案例:为JS文件提供类型声明 场景描述 假设我们有一个JavaScript文件 utils.js,其中包含一些实用工具函数和变量。为了在TypeScript中使用这些函数和变量并获得类型提示,我们可以使用 declare 关键词为它们提供类型声明。 1. 创建 JavaScri…...
ETH挖矿显卡超频信息汇总
NVIDIA 显卡 显卡型号 核心频率增减量 内存频率增减量 功耗墙(W) 预估算力(ethash算法) RTX 3090-3001000285W / 80%120 MH/sRTX 3080-150900220W / 68%98 MH/sRTX 3070-5001100130W / 60%60 MH/sRTX 3060 Ti-5001200130W / 65%60 MH/sRTX 2080 Ti-2001100150W /…...
调用 Xinference OpenAI接口时报错 Model not found in the model list, uid
错误如下, 请不要被错误吓住或蒙蔽双眼, 自己看最下面的报错内容 Traceback (most recent call last): File "C:\Users\HW\.conda\envs\aibot\Lib\site-packages\starlette\responses.py", line 259, in __call__ await wrap(partial(self.listen_for_disconn…...
一文说清:C静态库与动态库的区别
一 前言 大家在用C语言编程时,一定会遇到各种库,它们为开发者提供了大量的预编译函数和数据结构,从而极大地提高了软件开发的效率。 在C语言中,库主要分为两种类型: 静态库(Static Library)&…...
Mysql 5.7.6以上版本怎样关闭GTID(由GTID改为基于file,position方式)
平时不建议关闭GTID,假如开启GTID遇到问题,需要回退到基于file,position方式,则可以执行如下步骤: 1.在从库停止主从复制: STOP SLAVE; CHANGE MASTER TO MASTER_AUTO_POSITION 0; START SLAVE; SHOW SLAVE STAT…...
MATLAB常见数学运算函数
MATLAB中含有许多有用的函数,可以随时调用。 a b s abs abs函数 a b s abs abs函数在MATLAB中可以求绝对值,也可以求复数的模长:c e i l ceil ceil函数 向正无穷四舍五入(如果有小数,就向正方向进一)f l o o r floor floor函数 向负无穷四舍五入(如果有小数,就向负方向…...
设置Fusion360 - Prusa slicer -octoprint 一键打印流程
此流程可以直接从fusion360导出文件到prusa slicer切片,切片后可以一键上传并开始打印。以下操作在MacOS中进行,Windows也可以参考。 Fusion360中点击文件-3D打印 弹出对话框中点击应用程序,并在从我的计算机选择中选取Prusa Slicer的可执行…...
IO流实用案例:用字节流--输入流(Inpustream)、输出流(OutputStream)写一个拷贝图片的案例--超简单!
案例背景: 我的电脑桌面有一张白敬亭的照片,我们需要把这张照片拷贝到我的电脑D:\学习软件\copyBJT目录下,当前我们这个目录是没有东西的。 代码演示以及注释: ublic class StreamCopy {public static void main(String[] args)…...
Tensorflow基本概念
简介:本文从Graph讲到Session,同时讲解了tf.constant创建tensor的用法和variable需要初始化的知识点,可以给你打好一个学习Tensorflow的基础。本文都是基于TensorFlow1.14.0的版本下运行。 本专栏将会系统的讲解TensorFlow在1.14.0版本下的各…...
游戏引擎学习第九天
视频参考:https://www.bilibili.com/video/BV1ouUPYAErK/ 修改之前的方波数据,改播放正弦波 下面主要讲关于浮点数 1. char(字符类型) 大小:1 字节(8 位)表示方式:char 存储的是一个字符的 A…...
CondaError: Run ‘conda init‘ before ‘conda activate‘解决办法
已经执行了conda init,但是还是会报错CondaError: Run ‘conda init’ before ‘conda activate’ 原因:权限不够 解决办法:以管理员身份运行cmd,然后进入要操作的文件夹下,重新执行 conda init 和 conda activate 就可…...
如何提高谷歌浏览器的稳定性
谷歌浏览器是全球使用最广泛的网络浏览器之一,以其速度和易用性著称。然而,随着时间的推移,用户可能会遇到一些稳定性问题,比如页面加载缓慢、崩溃或意外关闭等。本文将提供一些实用的技巧来帮助你提高谷歌浏览器的稳定性…...
Spring基础之——控制反转(IOC)、依赖注入(DI)与切面编程(AOP)概念详解(适合小白,初学者必看)
前言 本篇博客讲详细介绍Spring框架中的两个最核心且最基础的概念:控制反转(IOC)和面向切面编程(AOP)。以及如何通过IDEA来构建一个Spring项目,通过实战和理论结合的方式来让大家真的学会Spring这个最流行的…...
java排序算法汇总
一、排序算法我介绍 1.1、介绍 排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。 1.2、排序的分类: 1) 内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。 2) 外部排序法&…...
游戏引擎中LOD渲染技术
一.LOD(Level Of Detail) 为了降低GPU渲染压力,根据摄像机距离模型距离将面数较高的模型替换为面数较低的模型. LOD LOD0(distance<10) LOD1(distance<20) LOD2(distance<30) 故通常引擎中MetaMesh是由一个或多个LOD模型构成. MetaMesh mesh mesh.lod1 mesh.lod…...
创新设计与智能系统设计融合
在智能制造与工业大模型时代,创新设计(以生成式AI、变型衍生、大规模定制为核心)与智能系统设计(以端-边-云协同、工业智能体、自主控制为核心)的融合,是制造企业实现研发与生产双向闭环的终极路径 。两者的…...
掌握C TCP通信:高效实现服务端与客户端数据交互
掌握C# TCP通信:高效实现服务端与客户端数据交互 【下载地址】CTcp通信实战服务端与客户端的数据交互包括指定终端发送与群发功能 本资源提供了一套完整的C#编程解决方案,用于实现TCP协议下的网络通信。通过此示例,您将学习如何在C#应用中搭建…...
【算法题攻略】位运算总结(含习题解析)
文章目录一、位运算总结1. 位操作符 和 移位操作符(含原码、反码、补码介绍)2. 给一个数n,确定它的二进制表示中的第 x 位是 0 还是 13. 给一个数n,将它的二进制表示中的第 x 位修改成 1(或 0)4. 提取一个数…...
【SysBench】从零到一:在Linux上部署sysbench-1.20进行数据库压测
1. 为什么你需要sysbench? 如果你正在使用MySQL或PostgreSQL这类数据库,迟早会遇到一个灵魂拷问:我的数据库到底能扛住多少并发请求?这时候sysbench就该登场了。这个工具就像数据库的"体能测试仪",能模拟真实…...
Keil MDK中HEX文件未生成的8.3路径问题解析
1. 问题现象与背景解析 在嵌入式开发领域,Keil MDK(Microcontroller Development Kit)是广泛使用的集成开发环境,尤其针对C166系列微控制器。最近遇到一个典型问题:开发者在Vision1环境中配置了L166链接器和OH166 HEX转…...
终极指南:3分钟快速安装Windows官方包管理器Winget
终极指南:3分钟快速安装Windows官方包管理器Winget 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirrors/wi/win…...
吕欣团队《大数据平台架构》第四章读书笔记:HDFS——把一块硬盘“拆”成一整个数据中心
最近在系统地补 Hadoop 的基础设施部分,第四章讲的是 HDFS(Hadoop Distributed File System)。这一章看下来最大的感受是:HDFS 本质上不是一个“文件系统增强版”,而是一种完全围绕“大规模数据处理”重新设计的存储哲…...
国网智能电表解决方案:从HPLC通信到远程费控的架构与实战
1. 项目概述:从一块电表到一套能源数据中枢如果你家里最近换了新电表,或者从事与园区、工厂能源管理相关的工作,大概率会接触到一种外观更简洁、带液晶屏、还能远程抄表的智能电表。这背后,就是国网电能表解决方案的落地体现。它早…...
Docker化部署KingbaseES V9:从镜像导入到开发版License激活实战
1. 为什么选择Docker部署KingbaseES V9? 在开发测试环境中,传统数据库安装方式往往需要耗费大量时间在环境配置和依赖解决上。我去年参与的一个政务云项目就遇到过这种情况:团队花了三天时间在不同操作系统的测试机上反复折腾依赖库ÿ…...
C51开发中汇编指令定位与内存优化实战
1. 理解C51开发中的汇编指令定位问题在嵌入式开发领域,尤其是使用Keil C51这类经典工具链时,我们经常需要深入理解编译器如何将高级语言转换为机器指令。最近我在调试一个8051项目时,遇到了一个典型问题:如何准确确定C源代码对应的…...
