C语言实现顺序表详解

devtools/2024/12/26 10:08:08/

文章目录

    • @[TOC]
  • 1.前言🙋🏼‍♂️
  • 2.顺序表🧣
    • 2.1 顺序表盖帘🧣
    • 2.2 顺序表特点🧣
    • 2.2 顺序表作用🧣
  • 3.顺序表基操🧤
    • 3.1 结构体初始化🎉
    • 3.2 顺序表初始化🎉
    • 3.3 顺序表创建🎉
    • 3.4 顺序表打印🎉
    • 3.5 顺序表插入🎉
    • 3.6 顺序表删除🎉
    • 3.7 顺序表查找🎉
    • 3.8 顺序表修改🎉
  • 4. 总结

1.前言🙋🏼‍♂️

   C语言想学好,链表和顺序表都跑不了.

2.顺序表🧣

2.1 顺序表盖帘🧣

   顺序表是C语言中一种常用的数据结构,用于存储一组具有相同类型的元素。顺序表是一种线性表,即元素之间存在顺序关系,可以通过下标访问元素。

2.2 顺序表特点🧣

   顺序表可以采用数组来实现,也可以使用动态内存分配来实现。无论采用哪种实现方式,顺序表都具有以下特点:

  •   1. 随机访问:顺序表中的元素可以通过下标直接访问,具有O(1)的时间复杂度。

  •   2. 内存连续:顺序表中的元素在内存中是连续存储的,这样可以有效利用计算机的缓存机制,提高访问效率。

  •   3. 固定大小:使用数组实现的顺序表的大小是固定的,无法动态扩容或缩容。使用动态内存分配实现的顺序表可以动态调整大小。

  •   4. 插入删除效率低:在顺序表的中间位置插入或删除元素需要移动后续元素,时间复杂度为O(n)。

2.2 顺序表作用🧣

   在C语言中,可以通过定义结构体来表示顺序表,结构体中包含一个指向元素数组的指针,以及其他与顺序表相关的属性,例如当前元素个数和最大容量等。使用结构体可以更方便地管理和操作顺序表。

3.顺序表基操🧤

3.1 结构体初始化🎉

#include <stdio.h>
#define MAXSIZE 100
typedef int ElemType;typedef struct{ElemType data[MAXSIZE]; ElemType length;
}sqlList;sqlList *L;

3.2 顺序表初始化🎉

//初始化表
void initTable(sqlList	*L){printf("initTable:\n");L->length = 0;
} 

3.3 顺序表创建🎉

//创建表
void createTable(sqlList *L,ElemType number){printf("createTable:\n");int i;printf("请输入%d个数据:\n",number);if(L->length>MAXSIZE){printf("顺序表已满");}for(i=0;i<number;i++){scanf("%d",&L->data[i]);}L->length = i;} 

3.4 顺序表打印🎉


//显示表
void showTable(sqlList	*L){printf("showTable:\n"); int i;for(i=0;i<L->length;i++){printf("%d ",L->data[i]);}
} 

3.5 顺序表插入🎉

void insertTable(sqlList *L,ElemType pos,ElemType val){printf("\ninserTable:\n");int i;if(L->length<MAXSIZE){for(i=L->length-1;i>=pos-1;i--){L->data[i+1] = L->data[i];}L->data[pos-1] = val;L->length++;}else{printf("顺序表长度已满\n");}
} 

3.6 顺序表删除🎉

void deleteTable(sqlList *L,ElemType x){printf("\n deleteTable: \n");int i,j;for(i=0;i<L->length;i++){if(L->data[i] == x){for(j=i;j<L->length;j++){L->data[j] =L->data[j+1];}L->length--;}}
} 

3.7 顺序表查找🎉

//查找元素 
int queryTable(sqlList *L,ElemType x){printf("\nqueryTable:\n");int i,res;i=0;while(i<L->length && L->data[i] !=x)i++;if(i>=L->length) return 0;else 	return i+1;
} 

3.8 顺序表修改🎉

//修改元素
void updateTable(sqlList *L,ElemType findNuber,ElemType alterNuber){int res = queryTable(L,findNuber);int i;L->data[res-1] = alterNuber;printf("\nres = %d\n",res);
} 

以下是顺序表的C语言代码(全部):

#include <stdio.h>
#define MAXSIZE 100
typedef int ElemType;typedef struct{ElemType data[MAXSIZE];ElemType length;
}sqlList;sqlList *L;//初始化表
void initTable(sqlList	*L){printf("initTable:\n");L->length = 0;
} //创建表
void createTable(sqlList *L,ElemType number){printf("createTable:\n");int i;printf("请输入%d个数据:\n",number);if(L->length>MAXSIZE){printf("顺序表已满");}for(i=0;i<number;i++){scanf("%d",&L->data[i]);}L->length = i;} //显示表
void showTable(sqlList	*L){printf("showTable:\n"); int i;for(i=0;i<L->length;i++){printf("%d ",L->data[i]);}
} //插入一个数据
void insertTable(sqlList *L,ElemType pos,ElemType val){printf("\ninserTable:\n");int i;if(L->length<MAXSIZE){for(i=L->length-1;i>=pos-1;i--){L->data[i+1] = L->data[i];}L->data[pos-1] = val;L->length++;}else{printf("顺序表长度已满\n");}
} //删除一个元素
void deleteTable(sqlList *L,ElemType x){printf("\n deleteTable: \n");int i,j;for(i=0;i<L->length;i++){if(L->data[i] == x){for(j=i;j<L->length;j++){L->data[j] =L->data[j+1];}L->length--;}}
} //查找元素 
int queryTable(sqlList *L,ElemType x){printf("\nqueryTable:\n");int i,res;i=0;while(i<L->length && L->data[i] !=x)i++;if(i>=L->length) return 0;else 			return i+1;
} //修改元素
void updateTable(sqlList *L,ElemType findNuber,ElemType alterNuber){int res = queryTable(L,findNuber);int i;L->data[res-1] = alterNuber;printf("\nres = %d\n",res);
} main()
{initTable(&L);	createTable(&L,5);showTable(&L);insertTable(&L,3,60);showTable(&L);deleteTable(&L,60);showTable(&L);printf("下标:%d\n",queryTable(&L,20));updateTable(&L,20,90);showTable(&L);
}

   以上代码演示了如何初始化、插入和删除元素,并打印顺序表的函数。代码中使用了一个结构体`sqlList `来表示顺序表,`data`数组存储元素,`length`记录当前元素个数。

   顺序表的操作还包括查找指定位置的元素、查找指定值的元素、判断是否为空表等,以上代码仅是一个简单示例。在实际应用中,可以根据具体需求来扩展顺序表的功能,不过实际的开发和这个也差的不是很多,如果这个你能看懂,就基本上没有太大问题了

4. 总结

   这里的顺序表对应着实际开发中的增、删、改、查,难度其实不大,主要是希望各位道友学会和学懂,然后多多支持一下小猿

some people are worth melting for. 🎀


http://www.ppmy.cn/devtools/145505.html

相关文章

华为原生鸿蒙5.0与代理IP的奇妙融合

目录 一、华为原生鸿蒙5.0简介 二、代理IP技术详解 三、鸿蒙5.0与代理IP的融合应用 四、设置与操作 五、案例分析 六、注意事项 七、未来展望 在数字世界的浩瀚宇宙中&#xff0c;操作系统如同星际间的桥梁&#xff0c;连接着设备与服务。华为原生鸿蒙5.0&#xff0c;这颗…

多数据源情况下,数据库连接池的加载流程

在多数据源配置的场景下&#xff0c;默认数据源的选择是一个重要的问题&#xff0c;特别是在引入动态数据源时。本文将详细分析为什么在默认情况下会使用 Druid 数据源&#xff0c;并展示相关的执行流程和源码。 单数据源的数据库连接池加载流程可以看这篇文章单数据源数据库连…

WPS工具栏灰色怎么办

WPS离线不登录&#xff0c;开启工具栏等相关功能 当你在使用WPS的过程中&#xff0c;若因网络问题或其他特殊原因&#xff0c;导致无法登录使用WPS时&#xff0c;可根据以下步骤开启离线兼容模式&#xff0c;开启此模式后&#xff0c;可在未登录的状态下&#xff0c;激活并使用…

3D高斯模型训练和查看

安装环境参考前一篇文章 win10安装3D Gaussian Splatting环境超详细 下载安装完成后的完整项目 1、准备数据 拍摄一些照片或者一段视频即可&#xff0c;下面准备的是拍摄一段视频&#xff0c;视频放在D:\github\gaussian-splatting\data\test\下面&#xff0c;路径不能有中文…

Apache解析漏洞(apache_parsing_vulnerability靶场攻略CVE-2017-15715靶场攻略)

apache_parsing_vulnerability靶场 Apache HTTPD ⽀持⼀个⽂件拥有多个后缀&#xff0c;并为不同后缀执⾏不同的指令 只要文件的后缀中存在相应的后缀&#xff0c;那么就会自动识别并执行 我们向靶场上传 111.jpg.xxx.php.gif 上传成功后会显示文件所在的路径&#xff0c;我…

“鞋履创新工坊”:运动鞋店的新产品设计与管理

3.1 系统可行性分析 开发一款程序软件不仅需要时间&#xff0c;也需要人力&#xff0c;物力资源。而进行可行性分析这个环节就是解决用户这方面的疑问&#xff0c;看看程序在当前的条件下是否可以进行开发。 3.1.1 技术可行性分析 此程序选用的开发语言是Java&#xff0c;这种编…

nodejs创建ws服务器,前端浏览器用websocket接收信息和发送信息给服务端

首页是用nodejs建立服务器端 //wsserver.js const WebSocketrequire(ws); const wssnew WebSocket.Server({port:8080}); wss.on(connection,function connection(ws){ws.on(error,console.error);//接收客户端发送过来的信息ws.on(message,function message(data){console.lo…

【ES6复习笔记】Spread 扩展运算符(8)

在现代前端开发中&#xff0c;JavaScript 的扩展运算符&#xff08;Spread Operator&#xff09;是一个非常有用的特性&#xff0c;它允许你将数组或对象展开&#xff0c;以便在函数调用、数组拼接、对象复制等场景中更方便地处理数据。扩展运算符&#xff08;spread&#xff0…