1. 数据结构——顺序表的主要操作

news2024/9/20 10:31:08

1. 内容

顺序表的初始化、插入、删除、按值查找、输出以及其时间复杂度的计算。

2.代码

#include<stdio.h>
#include<stdlib.h> 

//函数结果状态代码
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define MAXSIZE 100

typedef int ElemType;  //顺序表每个数据元素存储类型
typedef int Status; 
 
//定义顺序表的结构体SqList 
typedef struct sqlist{
	ElemType *elem;  //存储空间的基地址
	int length;    //当前长度 
}SqList; 

//1.顺序表的初始化
Status InitList(SqList &L){
//	L.elem=new ElemType[MAXSIZE];  //c++开辟空间 
    L.elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE); 
	if(!L.elem) return OVERFLOW;  //空间创建失败返回OVERFLOW
	L.length=0;
	return OK; 
} 

//2.顺序表插入(在顺序表L的第i个位置插入e)
//插入的位置范围可以是1到length+1(末尾位置之后也可) 
Status ListInsert(SqList &L,int i,ElemType e){
	if(i<1||i>L.length+1)  //判断i是否有效 
		return ERROR;  
	if(L.length>=MAXSIZE)  //判断存储空间是否已满 
		return ERROR; 
	//需要将length-1到i-1位置上的值全部往后移一位
	for(int j=L.length;j>=i;j--){
		L.elem[j]=L.elem[j-1];
	} 
	L.elem[i-1]=e;
	L.length++;
	return OK;
} 
//若线性表长度为n,则: 
//最好情况:直接在表尾插入,时间复杂度O(1)
//最坏情况:在表头插入,需要将n个全部后移一位,时间复杂度O(n)
//平均情况:第一个移动n,第二个移动n-1,......第n个移动1,第n+1移动0个 
//n(n+1)/2 * 1/(n+1) =n/2 

//3.删除操作(删除顺序表L第i个位置上的值,并将其值返回给e)
Status ListDelete(SqList &L,int i,ElemType &e){
	if(i<1||i>L.length)  //判断i是否合法 
		return ERROR;
	e=L.elem[i-1];
	//将i到L.length-1位置上的值统统往前移
	for(int j=i;j<L.length;j++)
		L.elem[j-1]=L.elem[j];
	L.length--;
	return OK; 
}
//最好情况:直接删除表尾元素,时间复杂度O(1)
//最坏情况:删除表头元素,需要将n-1个全部前移一位,时间复杂度O(n)
//平均情况:第一个移动n-1,第二个移动n-2,......第n个移动0
//(n-1)*n/2 * (1/n) =(n-1)/2


//4.按值查找(在顺序表L中查找第一个值为e的元素,并返回其位序)
Status LocateElem(SqList L,ElemType e){
	for(int i=0;i<L.length;i++){
		if(L.elem[i]==e)
			return i+1;
	}
	return ERROR; 
}
//最好情况:第一个就查找到了,时间复杂度O(1)
//最坏情况:最后才查找到或者未查找到,时间复杂度O(n)
//平均情况:在第一个位置1,第二个位置2,...,第n个位置n 
//n*(1+n)/2 * (1/n)= (n+1)/2

//5. 输出顺序表
void TraverseList(SqList L){
	for(int i=0;i<L.length;i++){
		printf("%-4d",L.elem[i]);
	}
	printf("\n");
} 

int main(void){
	SqList L;
	ElemType e;
	InitList(L);
	ListInsert(L,1,3);
	ListInsert(L,2,4);
	ListInsert(L,3,5);
	printf("插入后顺序表中的元素有:\n");
	TraverseList(L);
	ListDelete(L,1,e);
	printf("第1个位置删除的值为:%d\n",e);
	printf("删除后顺序表中的元素有:\n");
	TraverseList(L);
	int t=LocateElem(L,3);
	if(t==ERROR)
		printf("3在顺序表中不存在");
	else 
		printf("3存在于顺序表的第%d位置上"); 
	return 0;
} 
 

运行结果:

我代码的主程序仅仅只是简单验证了一下代码的正确性,并不全面,可以根据功能函数设计主菜单使其更加完备。

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

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

相关文章

Vue.js入门系列(九):表单数据处理、过滤器及常用指令

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Linux环境开发工具【yum与vim】

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1.Linux软件包管理器yum1.1 快速使用yum 2. Linux编辑器-vim的使用2.1 vim的基本…

机器学习——XGBoost

目录 一、初识XGBoost 1. 介绍 2. 使用 XGBoost 的方法 &#xff08;1&#xff09;直接使用xgboost库自己的建模流程 &#xff08;2&#xff09;使用xgboost库中的sklearn的API 3. XGBoost的三大板块 4. 提升集成算法 5. 建模流程 二、模型常用参数 1. n_estimators …

Leetcode每日刷题之611.有效三角形的个数(C++)

1. 思路解析 根据题意我们可知&#xff0c;我们需要在指定数组中找出任意三个数并判断是否可以组成一个三角形&#xff0c;即任意两数之和大于第三个数&#xff0c;任意两数之差小于第三个数&#xff0c;如果有数组元素相同的数组&#xff0c;由于取出的元素只是数值相同而实际…

Final Cut Pro Mac(fcpx专业视频剪辑软件) 10.8 中文版安装

Final Cut Pro 是苹果公司为专业视频编辑人士量身打造的非线性编辑软件&#xff0c;以其卓越的性能和深度定制的工具集&#xff0c;在影视制作、电视广播、广告创意等多个领域占据了重要地位。凭借其对高分辨率视频的无缝支持和实时剪辑的流畅体验&#xff0c;Final Cut Pro 成…

3.3 关系模型与关系代数

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

链表专题.

Leetcode 160. 相交链表 解题思路&#xff1a; 代码实现&#xff1a;时间复杂度O(nm) 空间复杂度O(1) 我的实现方式 class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* pa headA, *pb headB;bool f1 false, f2 fals…

数学建模预测类—【多元线性回归】

每日名言&#xff1a;成名每在穷苦日&#xff0c;败事多因得意时 目录 文章目录 前言 二、参数估计 三、多元线性回归模型和回归系数的检验 四、预测 总结 前言 本文将根据回归建模过程来讲解多元线性回归模型&#xff0c;有关回归分析的知识以及一元线性回归的内容可以戳…

[C++][opencv]基于opencv实现photoshop算法图像旋转

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 //图像旋转: src为原图像&#xff0c; dst为新图像, angle为旋转角度, isClip表示是采取缩小图片的方式 int imageRotate4(InputArray src, OutputArray dst, double angle, bool isClip) {Mat input src.…

大模型应用开发基础知识

一、LangChain介绍 背景 一个应用程序通常需要多次对大语言模型写提示并对它输出的结果进行解析。因此&#xff0c;需要写很多胶水代码。而LangChain的目的使这个开发过程变得更容易。目的 LangChain是一个构建大语言模型应用的开源框架。当有人在开发LLM的复杂应用&#xff0…

ModuleNotFoundError: No module named ‘transformers_modules.chatglm-6b-v1‘

ModuleNotFoundError: No module named transformers_modules.chatglm-6b-v1 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;…

基于Java语言的充电桩平台 包含(充电桩系统 汽车充电桩云快充协议 电动自行车充电桩协议 中电联充电桩互联互通协议)

介绍 SpringBoot 框架&#xff0c;充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5-1.6协议新能源汽车二轮车公交车二轮车充电-四轮车充电充电源代码充电平台源码Java源码 软件架构 软件架构说明 软件功能 小程序端&#xff1a;城市切换、附近电站、电桩详情…

【RAG实战】基于TextIn打造上市公司财务报表智能问答系统

今天介绍一个项目案例,利用大语言模型打造上市公司财务报表智能问答系统。 在当今竞争激烈的市场环境中,企业和投资者对财务信息的获取与分析要求越来越高。上市公司财务报表作为评估公司财务健康和未来发展的重要依据,提供了大量关键信息。 然而,传统的财务报表分析技术…

尚品汇-前端调用搜索实现(三十二)

目录&#xff1a; &#xff08;1&#xff09;修改web-all模块 &#xff08;2&#xff09;配置网关 &#xff08;3&#xff09;页面渲染 &#xff08;4&#xff09;面包屑处理 &#xff08;1&#xff09;修改web-all模块 修改pom.xml文件 <dependencies><depende…

QT串口通信

查看详情http://100bcw.com/qt6.htm 前言&#xff1a;如果用qt写程序作为上位机&#xff0c;然后通过和usb和下位机通信的时候&#xff0c;就需要用到qt中的串口通信了。 使用qt中的串口通信的时候需要用到的两个头文件分别为&#xff1a; #include <QtSerialPort/QSeria…

MYSQL----表的创建

1.创建表 create table 表名&#xff08; field1 datetype, field2 datetype, field3 datetype &#xff09; 1.field字段名&#xff0c;也就是属性&#xff0c;相当于java类里面的成员属性 2.datetype 数据类型 3.最后一个字段的定义&#xff0c;结束没有逗号 4.字段的定义在…

政策驱动,科技引领,漫途信息化监测方案守护农村饮水安全!

近日&#xff0c;山西省人民政府正式发布《山西省农村供水高质量发展规划》&#xff0c;明确到2030年&#xff0c;全面实现农村24小时供水&#xff0c;县域农村饮水安全标准化建设达标率力争达到80%&#xff0c;基本实现农村供水城市化、城乡供水均等化。 现阶段部分地区受…

基于VS2022+Qt5+C++的串口助手开发

目录 一、前言 二、环境准备 三、创建QT串口项目 ​编辑 四、串口项目实现 1.ui界面设计 2.添加QT串口模块 3.功能实现 ①串口扫描 ②波特率、停止位等设置 ③接收数据 ④发送数据 五、最终效果 六、总结 一、前言 如果有人之前看过我文章的话应该知道&#xf…

C# 窗体通过调用webapi往U9C系统创建请购单

C# 窗体通过调用webapi往U9C系统创建请购单 窗体图片 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System…

Java面试题———分布式篇

目录 1、什么是分布式事务 2、什么是CAP理论 3、为什么分布式系统中无法同时AC 4、什么是BASE理论 5、分布式事务的解决方案有哪些 6、Seata的架构是什么 7、XA模式的工作流程是什么 8、AT模型的工作原理是什么 9、TCC模型的工作原理是什么 1、什么是分布式事务 在分…