当前位置: 首页 > news >正文

C语言实现顺序表详解

文章目录

    • @[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. 🎀

相关文章:

C语言实现顺序表详解

文章目录 [TOC] 1.前言&#x1f64b;&#x1f3fc;‍♂️2.顺序表&#x1f9e3;2.1 顺序表概念&#x1f9e3;2.2 顺序表特点&#x1f9e3;2.2 顺序表作用&#x1f9e3; 3.顺序表基操&#x1f9e4;3.1 结构体初始化&#x1f389;3.2 顺序表初始化&#x1f389;3.3 顺序表创建&am…...

【ES6复习笔记】对象方法扩展(17)

对象方法扩展 在 JavaScript 中&#xff0c;对象是属性和方法的集合。除了内置的方法&#xff0c;我们还可以通过扩展对象的原型来添加新的方法。本教程将介绍如何使用 Object.is、Object.assign 和 Object.setPrototypeOf 方法来扩展对象。 1. Object.is 判断两个值是否完全…...

【视觉惯性SLAM:相机成像模型】

相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容&#xff0c;它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型&#xff0c;以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…...

学习笔记(C#基础书籍)-- C#基础篇

&#xff08;12.24&#xff09; C#介绍&#xff1a;《第一章》 特点&#xff1a;语法简洁&#xff0c;面向对象&#xff0c;支持绝大部分的web标准&#xff0c;强大的安全机制&#xff08;垃圾回收器&#xff09;&#xff0c;兼容性好&#xff08;遵循.NET的公共语言规范【CL…...

操作系统(26)数据一致性控制

前言 操作系统数据一致性控制是确保在计算机系统中&#xff0c;数据在不同的操作和处理过程中始终保持正确和完整的一种机制。 一、数据一致性的重要性 在当今数字化的时代&#xff0c;操作系统作为计算机系统的核心&#xff0c;负责管理和协调各种资源&#xff0c;以确保计算机…...

ubuntu24.04使用opencv4

ubuntu24.04LTS自带opencv4.5代码实例 //opencv_example.cpp #include <opencv2/opencv.hpp> #include <iostream>int main() {// 读取图像cv::Mat img cv::imread("image.jpg", cv::IMREAD_COLOR);if (img.empty()) {std::cerr << "无法读…...

【项目构建】Gradle入门

本文适用&#xff1a; 不知道什么是项目构建&#xff0c;可以了解下Ant&#xff0c;Maven&#xff0c;Gradle的区别。知道什么是项目构建&#xff0c;了解Ant&#xff0c;Maven&#xff0c;可以看到Gradle是怎么做的。知道什么是项目构建&#xff0c;了解Ant&#xff0c;Maven&…...

Electron -- Electron应用主要核心(二)

Electron 应用主要由以下几个核心组成部分构成&#xff1a; 主进程&#xff08;Main Process&#xff09;&#xff1a; Electron 应用的入口点是主进程&#xff0c;通常是 main.js 文件。它负责管理应用的生命周期&#xff0c;包括创建窗口、处理系统事件和应用更新等。主进程可…...

【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 &#x1f31f;&#x1f31f;本期讲解关于HTMLCSSJavaScript的基础知识&#xff0c;小编带领大家简单过一遍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 …...

git命令恢复/还原某个文件、删除远程仓库中的文件

有时刚创建的远程仓库&#xff0c;可能无意中把一些没用的文件上传到仓库&#xff0c;本文介绍一下怎么删除这些文件。 一、git命令恢复某个文件 第一步&#xff1a;拉取最新代码 git pull 第二步&#xff1a; 查看git 修改的文件状态 git status 第三步&#xff1a;查看…...

二十一、Ingress 进阶实践

架构参考 使用hostnetwork,推荐的方式,使用单独的物理服务器,不部署业务pod的主机。 一、Ingress Nginx Controller 安装 采用helm的安装方式,进行部署。 官网地址: https://kubernetes.github.io/ingress-nginx/deploy/ github地址: https://github.com/kubernetes/in…...

ES学习Promise对象(九)

这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器&#xff0c;里面保存着某个未来才会结束的事件&#xff08;通常是一个异步操作&#xff09;的结果。Promise 是一个对象&#xff0c;Promise 提供统一…...

寻找适合小户型的开源知识库open source knowledge base之路

寻找一个开源的知识库&#xff0c;为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中&#xff0c;以便更容易查阅&#xff0c;花更少时间收集、对比版本及分享等一系列管理工作&#xff0c;同时确保在需要时可以相对快速找到有用的资料&…...

Linux高级--2.6 网络面试问题

tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程&#xff0c;服务端开放一个IP端口&#xff0c;收到连接后&#xff0c;服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...

在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc

在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc &#x1f4d6; 前言 在 CentOS 7 上使用 NVM 安装 Node.js 后&#xff0c;可能会遇到如下问题&#xff1a; node: /lib64/libm.so.6: version GLIBC_2.27’ not found (required by node) node: /lib64/libc.so.6:…...

音视频入门基础:MPEG2-TS专题(20)——ES流简介

《T-REC-H.222.0-202106-S!!PDF-E.pdf》第27页对ES进行了定义。ES流是PES packets&#xff08;PES包&#xff09;中编码的视频、编码的音频或其他编码的比特流。一个ES流&#xff08;elementary stream&#xff09;在具有且只有一个stream_id的PES packets序列中携带&#xff1…...

五子棋小游戏设计(Matlab)

基于Matlab的五子棋小游戏设计 &#xff08;完整源码运行呈现的GUI界面&#xff09; &#xff08;完整的设计说明报告&#xff09; 需要请随时联系博主&#xff0c;博主基本都在线&#xff0c;能秒回&#xff01; 随着计算机技术的发展&#xff0c;将传统棋类游戏与编程技术…...

基于Pycharm与数据库的新闻管理系统(3)MongoDB

pip3 install pymongo 1.连接到MongoDB数据库 文件地址&#xff1a;db/mongo_db.py 从 pymongo 模块中导入 MongoClient 类&#xff1b;创建 MongoClient 的一个实例&#xff0c;该实例尝试使用提供的MongoDB连接字符串连接到MongoDB服务器。 from pymongo import MongoClie…...

WebRtc webrtc-streamer部署

文章目录 本文档只是为了留档方便以后工作运维&#xff0c;或者给同事分享文档内容比较简陋命令也不是特别全&#xff0c;不适合小白观看&#xff0c;如有不懂可以私信&#xff0c;上班期间都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…...

CVPR-2024 | 具身导航模型大一统!NaviLLM:学习迈向具身导航的通用模型

作者&#xff1a;Duo Zheng, Shijia Huang, Lin Zhao, Yiwu Zhong, Liwei Wang 单位&#xff1a;香港中文大学&#xff0c;上海人工智能实验室&#xff0c;感知与交互智能中心 论文链接&#xff1a;Towards Learning a Generalist Model for Embodied Navigation&#xff08;…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

【java】【服务器】线程上下文丢失 是指什么

目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失&#xff1f; 直观示例说明 为什么上下文如此重要&#xff1f; 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程&#xff0c;代码应该如何实现 推荐方案&#xff1a;使用 ManagedE…...