数据结构--顺序表的基本操作[王道]

截图来自王道数据结构公开课

目录

1.插入操作

代码

时间复杂度分析

2.删除操作

代码

时间复杂度分析

3.按值寻找(顺序查找)

代码

时间复杂度

4.按位寻找(按序号查找)

代码


快速回顾顺序表的定义以及特点:数据结构-顺序表的实现 [王道]-CSDN博客

本篇博客框架(画的有点潦草):


1.插入操作

基本思想:

ListInsert(&L, i, e):插入操作。在顺序表第i(1\leq i \leq L.length+1)个位置插入新元素e。

若输入的位置不合法则返回false;

否则 将第i个元素及其后面的所有元素依次往后移动一个位置;

表长增加1,插入成功。

代码

#define MaxSize 10  //定义最大长度//采用静态分配方法 
typedef struct{int data[MaxSize]; //用静态的“数组”存放数据元素int length;        //定义顺序表当前长度 
}SqList;               //顺序表的类型定义//插入操作 
bool ListInsert(SqList &L ,int i,int e){if(i<1 || i>L.length+1) //判断i的范围是否有效return false;if(L.length >= MaxSize) //当前存储空间已满,不能插入return false;for(int j=L.length; j>=i; j--) //将第i个元素及之后的元素后移 L.data[j] = L.data[j-1];L.data[i-1] = e;           //在位置i处放入新元素eL.length++;                //表长加1 return true; } 

注意:要区分顺序表的位序数组下标

时间复杂度分析


2.删除操作

基本思想:

ListDelete(&L , i , &e):删除操作。删除表中第i(1\leq i \leq L.length+1)个位置的元素,使用引用变量e返回。

若i的输入不合法,则返回false;

否则,将被删元素赋给引用变量e,并将第i+1个元素及其后的所有元素依次往前移动一个位置,返回true。

代码

#include <cstdio>
#define MaxSize 10  //定义最大长度//采用静态分配方法 
typedef struct{int data[MaxSize]; //用静态的“数组”存放数据元素int length;        //定义顺序表当前长度 
}SqList;               //顺序表的类型定义//初始化一个顺序表,长度为0 
void InitList(SqList &L){L.length = 0 ;  
}//删除操作
bool ListDelete(SqList &L, int i,int &e){if(i<1 || i>L.length) //判断i的范围是否有效 return false;e = L.data[i-1];      //将被删除的元素赋给efor(int j=i; j<L.length ; j++)  //将第i个位置后的元素前移 L.data[j-1] = L.data[j]; L.length--;           //线性表长度减1 return true;
} int main(){SqList L;    //声明一个顺序表InitList(L); //初始化顺序表 int e = -1;  //用变量e把删除的元素引用回来if(ListDelete(L,3,e))printf("已删除第3个元素,删除元素值为=%d\n",e);elseprintf("位序i不合法,删除失败\n"); return 0;
}

时间复杂度分析

插入、删除操作过程示意:


3.按值寻找(顺序查找)

基本思想:

在顺序表L中查找第一个元素值等于e的元素,并返回其位序。

代码

//在顺序表L中查找第一个元素值等于e的元素,并返回其位序
int LocateElem(SqList L,ElemType e){for(int i=0; i<L.length; i++)if(L.data[i] == e)return i+1; //数组下标为i的元素值等于e,返回其位序i+1 return 0 ;          //此时退出循环,说明查找失败 
} 

时间复杂度

注意:

关于这一句 比较数据元素的值 ,补充一个C/C++知识点。 

基本数据类型:int char double float可以直接用运算符“==”进行数值上的比较,但是结构类型struct的数据类型不可以。

结构体struct的比较需要依次对比各个分量来判断两个结构体是否相等。

正确比较方法:

#include <iostream>
#include <cstdio>using namespace std;typedef struct{int num;int people;
}Customer;void test(){Customer a;Customer b;a.num = 1;a.people = 1;b.num = 1;b.people = 1;//应该将结构体中的每个变量分开 进行各自比较if(a.num == b.num && a.people == b.people){printf("相等");}else{printf("不相等");}
}

而不是:


4.按位寻找(按序号查找)

基本思想:

按位寻找非常简单,直接根据数组下标访问数组元素,其时间复杂度为O(1)---随机存取特性
 

代码

#define MaxSize 10 //定义最大长度//静态分配定义顺序表 
typedef struct{ElemType data[MaxSize];int length;
}SqList; //按位查找 直接按照数组下标返回元素值 与访问普通数组的方法一样
ElemType GetElem(SqList L,int i){return L.data[i-1];
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、防御保护---防火墙基础知识篇

二、防御保护---防火墙基础知识篇 一、什么是防火墙二、防火墙的发展史1.包过滤防火墙(一个严格的规则表)2.应用代理防火墙(每个应用添加代理)3.状态检测防火墙(首次检查建立会话表)3.入侵检测系统(IDS)-----网络摄像头4.入侵防御系统(IPS)-----抵御2-7层已知威胁5.防病毒网关(…

Unity中使用Ultraleap的InteractionButton组件

本节在上一节基础上进行&#xff0c;上一小结参考如下&#xff1a; Unity中创建Ultraleap 3Di交互项目 本节工程文件如下&#xff1a; Unity中使用Ultraleap的InteractionButton组件 本节结构有所更改&#xff0c;主要是参考官方示例结构进行重新调整&#xff0c;和上一小节相…

wordpress找不回密码怎么办?4种方法设置新密码

有些WordPress站长太久不登录后台了&#xff0c;所以就忘记了管理员登录密码&#xff0c;这种情况我们应该怎么找回密码呢&#xff1f;或者设置一个新密码呢&#xff1f;下面boke112百科就跟大家分享4种方法设置WordPress新密码。 方法一、登录页面的“忘记密码&#xff1f;”…

Shell中正则表达式

1.正则表达式介绍 1、正则表达式---通常用于判断语句中&#xff0c;用来检查某一字符串是否满足某一格式 2、正则表达式是由普通字符与元字符组成 3、普通字符包括大小写字母、数字、标点符号及一些其他符号 4、元字符是指在正则表达式中具有特殊意义的专用字符&#xff0c…

Hack The Box-Pov

信息收集&端口利用 先使用nmap对主机进行端口扫描 nmap 10.10.11.251只开放了80端口 访问网站后发现没有什么功能点,尝试目录扫描 并没有什么能够利用的点 使用gobuster进行子域名扫描 gobuster dns -d pov.htb -w /usr/share/wordlists/seclists/Discovery/DNS/subdo…

Vue之初识Vue CLI 脚手架

Vue CLI 是Vue 官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子。【集成了webpack配置】 脚手架有什么好处&#xff1f; 1.开箱即用&#xff0c;零配置 2.内置 babel 等工具 3.标准化 使用步骤: 1.全局安装(一次):yarn globaladd vue/cli …

自然语言处理(NLP)技术使用

自然语言处理&#xff08;NLP&#xff09;技术使用 以下是一些自然语言处理&#xff08;NLP&#xff09;技术的例子&#xff1a;以上只是一些NLP技术的例子&#xff0c;还有许多其他的技术和应用&#xff0c;如文本分类、文本生成、问答系统等。NLP技术的发展正逐渐改变人们与计…

LeetCode.209. 长度最小的子数组

题目 题目链接 分析 本题的题意就是让我们找最短的子数组和 > target 的子数组的长度。 首先最能想到的就是暴力方法&#xff0c;外层循环以数组每一个元素都作为起点&#xff0c;内存循环累加元素&#xff0c;当大于等于 target 的时候记录当前元素个数&#xff0c;更新…

DL/T645、IEC104转MQTT网关BE113

随着电力系统信息化建设和数字化转型的进程不断加速&#xff0c;对电力能源的智能化需求也日趋增强。健全稳定的智慧电力系统能够为工业生产、基础设施建设以及国防建设提供稳定的能源支持。在此背景下&#xff0c;高性能的工业电力数据传输解决方案——协议转换网关应运而生&a…

深入了解Matplotlib中的子图创建方法

深入了解Matplotlib中的子图创建方法 一 add_axes( **kwargs):1.1 函数介绍1.2 示例一 创建第一张子图1.2 示例二 polar参数的运用1.3 示例三 创建多张子图 二 add_subplot(*args, **kwargs):2.1 函数介绍2.2 示例一 三 两种方法的区别3.1 参数形式3.2 布局灵活性3.3 适用场景3…

成功解决AttributeError: ‘str‘ object has no attribute ‘decode‘

成功解决AttributeError: ‘str’ object has no attribute ‘decode’. &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;报错分析及解决方案&#x1f333;&#x1f333;参考文章&#x1f333;&#x1f333;结尾&#x1f333; &#x1f333;引…

Ultraleap 3Di示例Interactable Objects组件分析

该示例代码位置如下&#xff1a; 分析如下&#xff1a; Hover Enabled&#xff1a;悬停功能&#xff0c;手放在这个模型上&#xff0c;会触发我们手放在这个模型上的悬停功能。此时当手靠近模型的时候&#xff0c;手的模型的颜色会发生改变&#xff0c;反之&#xff0c;则不会…