【C语言零基础入门篇 - 14】:顺序表

文章目录

  • 顺序表
    • 线性表简介
    • 顺序表的基本概念
    • 顺序表的定义
    • 顺序表的功能实现

顺序表


线性表简介

线性表:线性表是数据结构的一种。
一个线性表是 n 个具有相同特性的数据元素的有限序列。(数组也是线性表)
线性表中数据元素之间是一对一的关系。

线性表主要有顺序表、链表以及栈和队列。

顺序表的基本概念

什么是顺序表?
顺序表是一种数据结构,结构是将数据依次存放在地址连续的存储单元中。

顺序表的存储特点是:
1、存储元素的地址是连续的
2、通过对首地址的偏移,可访问所有元素

顺序表的定义

顺序表的结构定义(数组):

int arr[100] ;	//可以存放100个元素的顺序表
int len = 0 ;		//当前元素的个数
int maxSize = 100 ;		//最多能存多少个元素

顺序表的结构定义(指针):

int *buff = NULL ;	//顺序表
int len = 0 ; //元素个数
int maxSize = 0 ; //最大容量

顺序表的结构定义(结构体):

typedef int Type //类型的定义
struct Array{Type *data;	//数据域(存储数据的空间)int length; //顺序表的长度
};

顺序表的功能实现

顺序表的基本操作:增、删、改、查。
用指针实现以下顺序表的基本操作:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define _CRT_SECURE_NO_WARNINGS//分配内存空间
void fun(int**p, int*maxSize) // p=&buff;*p=buff
{printf("请输入内存空间大小:");scanf("%d", maxSize);*p = (int*)malloc(*maxSize*sizeof(int));//给分配的内存空间赋初值memset(*p, 0, *maxSize*sizeof(int)); //逐字节初始化
}//添加数据
void Add_data(int**p, int*maxSize, int*len)
{int data = 0;printf("请输入添加的数据:");scanf("%d", &data);if (*len >= *maxSize) //如果数据量超过最大内存空间{*maxSize = *maxSize + *maxSize / 2;int*temp = (int*)malloc(*maxSize*sizeof(int)); //申请更大的内存空间//将数据复制到临时指针变量for (int j = 0; j < *len; j++){temp[j] = (*p)[j];}free(*p); //释放buff的内存空间*p = temp; //将buff指向temp}(*p)[*len] = data;(*len)++; //因为* 和 +的优先级都是二级,从右往左进行运算
}//打印结果
void printData(int**p, int len)
{for (int i = 0; i < len; i++){printf("%d\t", (*p)[i]);}printf("\n");
}//删除数据
void deleteData(int**p, int*len)
{int data = 0;printf("请输入要删除的数据:");scanf("%d", &data);for (int i = 0; i < *len; i++){if ((*p)[i] == data) //如果找到要删除的数据{for (int j = i; j < *len; j++){(*p)[j] = (*p)[j + 1];}(*len)--; //数据长度减一printf("删除 %d 成功,位置:%d\n", data, i+1);return; //退出函数}}printf("不存在 %d!\n", data); //没找到要删除的数据
}//修改数据
void modifyData(int**p, int len)
{int data = 0;int val = 0;printf("请输入要修改的数据:");scanf("%d", &data);printf("请输入修改后的值:");scanf("%d", &val);for (int j = 0; j < len; j++){if ((*p)[j] == data) //如果找到该数据{(*p)[j] = val; //修改数据printf("数据 %d 已被修改,位置:%d\n", data, j+1);return; //退出函数}}printf("未找到该数据!\n"); //如果找不到该数据
}//查找数据
void findData(int*p, int len) //p = buff
{int data = 0;printf("请输入查找的数据:");scanf("%d", &data);for (int j = 0; j < len; j++){if (p[j] == data) //找到数据{printf("元素值:%d,位置:%d\n", data, j + 1);return;}}printf("未找到该数据!\n");
}int main()
{int *buff = NULL; //定义一个指针int len = 0; //长度int maxSize = 0; //最大内存int data = 0;fun(&buff, &maxSize);Add_data(&buff, &maxSize, &len);Add_data(&buff, &maxSize, &len);Add_data(&buff, &maxSize, &len);printData(&buff, len);deleteData(&buff, &len);printData(&buff, len);deleteData(&buff, &len);printData(&buff, len);modifyData(&buff, len);printData(&buff, len);findData(buff, len);findData(buff, len);
}

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

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

相关文章

C++初阶:STL详解(六)——list的介绍和使用

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 前面我们已经了解了strin…

c++----io流

提示&#xff1a;以下 是本篇文章正文内容&#xff0c;下面案例可供参考 1.标准io流 (1)数据的循环输入 对于内置类型&#xff1a;cin和cout直接使用&#xff0c;c已经重载了 (2)对于自定义类型&#xff1a; 需要我们自己对类型进行重载 2.文件io流 ifstream ifile(只输入…

机器学习中结构风险最小化的正则化项用途及原理详解

一、概述 数学和工程领域&#xff0c;正则(Regularize)意味着使某物标准化或规范化&#xff0c;在机器学习领域指的是使模型的行为更加规范化&#xff0c;以避免极端或过于复杂的模型。 正则化项&#xff08;Regularization Term&#xff09;是机器学习模型中用于控制模型复杂…

力扣72-编辑距离(Java详细题解)

题目链接&#xff1a;力扣72-编辑距离 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 5.如果没有ac打印dp数组 利于debug。 每一个dp…

鸿蒙OpenHarmony【轻量系统内核扩展组件(动态加载)】子系统开发

基本概念 在硬件资源有限的小设备中&#xff0c;需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素&#xff0c;同时考虑到多平台的通用性&#xff0c;LiteOS-M选择业界标准的ELF加载方案&#xff0c;方便拓展算法生态。LiteOS-M提供类…

微信小程序认证流程

官方描述&#xff1a; 微信接口服务&#xff1a;即微信服务器。 具体的流程如下&#xff1a; 1.前端调用wx.login()获取登录凭证code 2.前端请求后端进行认证&#xff0c;发送code 3.后端请求微信获取openid 4.后端生成认证成功凭证返回给前端。 说明 调用 wx.login() 获…

【二等奖论文】2024年华为杯研赛C题54页成品论文(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取论文的入口&#xff01; 点击链接获取【2024华为杯研赛资料汇总】&#xff1a;https://qm.qq.com/q/Nr0POlQGc2https://qm.qq.com/q/Nr0POlQGc2 摘 要&#xff1a; 随着国民经济发…

简易CPU设计入门:取指令(一),端口列表与变量声明

取指令这一块呢&#xff0c;个人觉得&#xff0c;不太好讲。但是呢&#xff0c;不好讲&#xff0c;我也得讲啊。那就尽量地讲吧。如果讲得不好的话&#xff0c;那么&#xff0c;欢迎大家提出好的意见&#xff0c;帮助我改进讲课的质量。 首先呢&#xff0c;还是请大家去下载本…

nodejs基于vue电子产品商城销售网站的设计与实现 _bugfu

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式&#xff0c;开发软件有很多种可以用&#xff0c;本次开发用到的软件是vscode&#xff0c;用到的数据库是…

FiBiNET模型实现推荐算法

1. 项目简介 A031-FiBiNET模型项目是一个基于深度学习的推荐系统算法实现&#xff0c;旨在提升推荐系统的性能和精度。该项目的背景源于当今互联网平台中&#xff0c;推荐算法在电商、社交、内容分发等领域的广泛应用。推荐系统通过分析用户的历史行为和兴趣偏好&#xff0c;预…

java项目之线上辅导班系统的开发与设计

项目简介 基于springboot的线上辅导班系统的开发与设计的主要使用者分为&#xff1a; 管理员在后台主要管理字典管理、论坛管理、公开课管理、课程管理、课程报名管理、课程收藏管理、课程留言管理、师资力量管理、用户管理、管理员管理等。 &#x1f495;&#x1f495;作者&a…

单细胞monocle3分析流程再整理

重读上一篇关于monocle3的推文的时候感觉内容冗长繁琐&#xff0c;因此笔者把关键部分代码稍作了整理。 推文链接&#xff1a;单细胞拟时序/轨迹分析monocle3流程学习和整理 https://mp.weixin.qq.com/s/NRrFH8sjdUUq20z9hWAFyQ 也可以看一看monocle2推文&#xff1a; 单细胞…

探索 ShellGPT:终端中的 AI 助手

文章目录 探索 ShellGPT&#xff1a;终端中的 AI 助手背景介绍ShellGPT 是什么&#xff1f;如何安装 ShellGPT&#xff1f;简单的库函数使用方法场景应用常见问题及解决方案总结 探索 ShellGPT&#xff1a;终端中的 AI 助手 背景介绍 在当今快速发展的技术领域&#xff0c;命…

双非本 985 硕士,秋招上岸字节算法岗!

最近已有不少大厂都在秋招宣讲了&#xff0c;也有一些在 Offer 发放阶段。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新人如何快速入门算法岗、如何准备面试攻略、面试常考点、大模型项目落地经验分享等热门话题进行了深入的讨论。…

Chainlit集成LlamaIndex实现知识库高级检索(自动合并检索)

检索原理 自动合并检索 自动合并检索原理&#xff0c;和我的上一篇文章的检索方案&#xff1a; 将文本分割成512大小&#xff08;一般对应段落大小&#xff09;和128&#xff08;一般对句子大小不是严格的句子长度&#xff09;大小两种分别存储到索引库&#xff0c;再用llama_…

架构设计笔记-5-软件工程基础知识

知识要点 按软件过程活动&#xff0c;将软件工具分为软件开发工具、软件维护工具、软件管理和软件支持工具。 软件开发工具&#xff1a;需求分析工具、设计工具、编码与排错工具。 软件维护工具&#xff1a;版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工…

快速解决Isaac Sim资源获取不到问题

国内使用Isaac Sim的时候&#xff0c;最常见的问题是加载不了USD或材质资源&#xff0c;这会导致整个Isaac Sim软件卡住或崩溃&#xff0c;以及无法继续开展项目。比如加载realsense或&#xff0c;最新的Isaac Sim 4.2.0 加载一个激光雷达&#xff0c;都要获取相关传感器usd&am…

桶排序和计数排序(非比较排序算法)

桶排序 桶排序是一种基于分配的排序算法&#xff0c;特别适合用来排序均匀分布的数据。它的基本思想是将输入的数据分到有限数量的桶里&#xff0c;然后对每个桶内的数据分别进行排序&#xff0c;最后再将各个桶内的数据合并得到最终的排序结果。(通常用于浮点数&#xff0c;因…

RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案

RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案 &#x1f6e0;️ RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案摘要 &#x1f4c3;引言 ✨1. 什么是递归&#xff1f;&#x1f50d;1.1 递归的基本概念 &#x…

JavaScript可视化示例

JavaScript 可视化是指使用 JavaScript 编程语言来创建和操作图形、图表、动画等视觉元素的过程。以下是一些常见的 JavaScript 可视化库和工具&#xff0c;以及它们的主要特点&#xff1a; 1. D3.js 特点: D3.js&#xff08;Data-Driven Documents&#xff09;是一个非常强大…