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

【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);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android 15 正式发布至 AOSP
  • App及web反编译方案
  • vue3中如何拿到vue2中的this
  • 麒麟操作系统 xxl-job集群搭建
  • 毕业写作很难?分享5款论文AI写作软件永久免费版!
  • 【洛谷】P11062 【MX-X4-T2】「Jason-1」加法 的题解
  • Java设计模式—面向对象设计原则(三) -----> 依赖倒转原则DIP(完整详解,附有代码+案例)
  • [语言月赛 202408] 因友情而终结
  • 一步到位:通过 Docker Compose 部署 EFK 进行 Docker 日志采集
  • 使用c#制作一个小型桌面程序
  • 数据结构——(java版)Map与Set
  • 微波无源器件 功分器3 一种用于多端口辐射单元的紧凑四路双极化正交模功分器的设计
  • 管道缺陷检测系统源码分享
  • 使用 Python 实现 Windows 应用图标的便捷生成:一站式 PNG 转 ICO 工具20240918
  • AutoSar AP中Proxy Class中Methods描述的总结
  • [译]CSS 居中(Center)方法大合集
  • android图片蒙层
  • go append函数以及写入
  • JavaScript创建对象的四种方式
  • JSDuck 与 AngularJS 融合技巧
  • js写一个简单的选项卡
  • js中的正则表达式入门
  • nginx 负载服务器优化
  • Promise初体验
  • React16时代,该用什么姿势写 React ?
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • use Google search engine
  • vue-loader 源码解析系列之 selector
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • ------- 计算机网络基础
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 算法系列——算法入门之递归分而治之思想的实现
  • 消息队列系列二(IOT中消息队列的应用)
  • 一道闭包题引发的思考
  • 智能合约开发环境搭建及Hello World合约
  • 最近的计划
  • ​马来语翻译中文去哪比较好?
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (3) cmake编译多个cpp文件
  • (Oracle)SQL优化技巧(一):分页查询
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (算法)硬币问题
  • (转) 深度模型优化性能 调参
  • (转载)Linux 多线程条件变量同步
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .equals()到底是什么意思?
  • .NET 使用 XPath 来读写 XML 文件
  • .net 中viewstate的原理和使用
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .Net插件开发开源框架
  • .NET未来路在何方?