数据结构--线性表2-1

目录

 一、线性结构的定义

二、线性表的表示

三、顺序表的实现(或操作)

1、修改:

2、插入:

四、顺序表的运算效率分析:时间效率分析:


 一、线性结构的定义

        若结构时非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。可表示为:(a1,a2,a3,……,an)

1,2,3,……,n:下标,即元素的序号,表示元素在表中的位置。

n为元素总个数,即表长。n>=0当n=0时,称为 空表。

特点1、只有一个首结点和尾结点;

特点2、除首尾结点外,其它结点只有一个直接前驱和一个直接后继。

线性结构包括:线性表、堆栈、队列、字符串、数组等。其中最典型、最常用的是-----线性表。

注意:同一线性表中的元素必定具有相同特性!

二、线性表的表示

        线性表的顺序表示又称为顺序存储结构顺序映像

        顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。

特点:逻辑上相邻的元素,物理上也相邻。

        顺序存储方法:用一组地址连续的存储单元一次存储线性表的元素。

例如,可以利用数组V[n]来实现。

注意:在C语言中数组的下标是从0开始的,即:V[n]的有效范围是从V[0]~V[n-1]。

三、顺序表的实现(或操作)

数据结构的基本操作:        修改、插入、删除、查找、排序

1、修改

通过数组的下标便可访问某个特定的元素并修改之。核心语句:V[i]=x;

显然,顺序表修改操作的时间效率是O(1)

2、插入

在线性表的第i个位置前插入一个元素

实现步骤:(1) 将第n至第i位的元素向后移动一个位置;

                  (2) 将要插入的元素写到第i个位置;

                  (3) 表长加1。

注意:事先应判断:插入位置i是都合法?表里是否已满?

应当符合条件:1<=i<=n+1      或 i = [1,n+1]

核心语句:

for(j=n;j>=1;j--)

        a[j+1]=a[j];

a[i]=x;

n++;

将上述插入与删除写完整:

 

#include <stdio.h>
#include <stdlib.h>
#define N 100
int arry[]={};

int main()
{
	int num=0;
	int num1=0;
	int wei;
	printf("%d\n",arry[num]);
	printf("请输入数组元素:\n");
	while(arry[num]>=0)
	{
		num=num1;
		scanf("%d",&arry[num]);
		num1++;
	}
	printf("输入完成!!!\n");
	for(int i=0;i<num;i++)
	{
		printf("%d\t",arry[i]);
	}
	num1=0;
插入操作 num1为需要插入的数据wei,位置 
	printf("\n进行插入操作:\n");
	printf("请输入需要插入的位置:");
	scanf("%d",&wei);
	if(wei<0||wei>num)
	{
		printf("位置输入错!!!");
		exit(0);	
	}
	else
	{
		printf("请输入需要插入的数值:");
		scanf("%d",&num1); 
		for(int j=num;j>=wei;j--)
		{
			arry[j+1]=arry[j];
		}
		num++;
		arry[wei]=num1;
	}
	printf("打印元素:\n");
	for(int i=0;i<num;i++)
		printf("%d\t",arry[i]);
///删除操作///wei需要删除的位置 
	printf("\n进行删除操作:\n");
	printf("请输入需要删除的数的位置:");
	scanf("%d",&wei);
	for(int j=wei;j<num;j++)
		arry[j]=arry[j+1];
	num--;
	printf("打印元素:\n");
	for(int i=0;i<num;i++)
		printf("%d\t",arry[i]);	
	return 0;
}

 

 

四、顺序表的运算效率分析:
时间效率分析:

算符时间主要耗费在移动元素的操作上,因此计算时间复杂度的基本操作(最深层语句频度)

T(n)= o (移动元素的次数)

而移动元素的个数取决于插入或删除元素的位置。

假如:若在长度为n的线性表的第i位前插入一个元素,则向后移动元素的次数f(n)为:
                                        f(n)= n-i+1;

若插入在尾结点之后,则根本无需移动(特别快)

若插入在首结点之前,则表中元素全部要后移(特别慢)

应当考虑各种未知插入(共n+1种可能)的平均次数才合理。

推导:假定在每个元素未知上插入x的可能性都一样。

若在首结点前插入,需要移动的元素最多,后移次数为n;

若在a(1)后面插入,则需要移动n-1个元素,后移次数为n-1;

……

若在a(n-1)后面插入,则需要移动1个元素,后移次数为1; 

若在a(n)后面插入,则需要移动0个元素,后移次数为0;

所有可能的元素移动次数合计:0+1+2+……+n-1+n = (n+0)(n+1)/2

共有n+1(连头带尾)种插入形式!!!

故插入时的平均移动次数为:n(n+1))/2 ÷(n+1)=n/2≈ O(n)   【n只跟次数有关与前面的系数无关】。

同理,推导出顺序表删除一元素的时间效率为:T(n)= (n-1)/2≈O(n)。

总结:对于顺序表,插入、删除操作平均需要移动一半元素(n/2),时间的复杂度为O(n)。由于在操作时,只需要提供辅助变量,因此空间复杂度为O(1)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】库和表的操作

目录 一、库的操作 1.1创建数据库 1.2创建数据库案例 1.3字符集和校验规则 &#xff08;1&#xff09;查看系统默认字符集以及校验规则 &#xff08;2&#xff09;查看数据库支持的字符集 &#xff08;3&#xff09;查看数据库支持的字符集校验规则 &#xff08;4&…

Layui下拉多选框

标题xmSelect插件&#xff1a; xmSelect文档 下载Layui第三方插件 下拉多选框效果&#xff1a; 实现方法(例子)&#xff1a; 将xmSelect插件的xm-select.js文件引入到layui中&#xff1a; <script src"public/js/xm-select/xm-select.js"></script> …

Ubuntu搭建Samba服务-学习记录

文章目录 Ubuntu安装Samba流程Samba配置文件Samba添加账户配置文件修改Samba服务控制设置开机自动启动通过systemctl 启动服务通过 rc.local 启动 Windows访问参考链接 当前文章仅用于记录&#xff0c;在 Ubuntu中安装使用Samba&#xff0c;在Windows访问 系统环境&#xff1a;…

数据库管理-第九十四期 19c OCM之路-第四堂(02)(20230725)

第九十四期 19c OCM之路-第四堂&#xff08;02&#xff09;&#xff08;20230725&#xff09; 第四堂继续&#xff01; 考点3&#xff1a;SQL statement tuning SQL语句调优 收集Schema统计信息 exec dbms_stats.gather_schems_stats(HR);开启制定表索引监控 create index…

Android性能优化之游戏的Theme背景图

近期&#xff0c;对游戏的内存优化&#xff0c;通过内存快照发现&#xff0c;某个Activity的theme背景图 占用3M 多。考虑着手对齐进行优化。 问题 查看游戏中的内存快照&#xff0c;发现有一个图片bitmap 占用3M 多&#xff0c;设置在Activity的背景中&#xff1a; 查看Phon…

scrcpy2.0+实时将手机画面显示在屏幕上并用鼠标模拟点击2023.7.26

想要用AI代打手游&#xff0c;除了模拟器登录&#xff0c;也可以直接使用第三方工具Scrcpy&#xff0c;来自github&#xff0c;它是一个开源的屏幕镜像工具&#xff0c;可以在电脑上显示Android设备的画面&#xff0c;并支持使用鼠标进行交互。 目录 1. 下载安装2. scrcpy的高级…

使用serverless实现从oss下载文件并压缩

公司之前开发一个网盘系统, 可以上传文件, 打包压缩下载文件, 但是在处理大文件的时候, 服务器遇到了性能问题, 主要是这个项目是单机部署.......(离谱), 然后带宽只有100M, 现在用户比之前多很多, 然后所有人的压缩下载请求都给到这一台服务器了, 比如多个人下载的时候带宽问…

python与深度学习(四):ANN和fashion_mnist二

目录 1. 说明2. fashion_mnist的ANN模型测试2.1 导入相关库2.2 加载数据和模型2.3 设置保存图片的路径2.4 加载图片2.5 图片预处理2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章训练的模型进行测…

CASAtomic原子操作详解

一、CAS&#xff08;Compare And Swap&#xff09; 1、CAS介绍 CAS原理&#xff1a;假设有三个值&#xff0c;E&#xff08;旧值&#xff09;、U&#xff08;需要更新的值&#xff09;、V&#xff08;内存中真实的值&#xff09;&#xff0c;具体参照下图&#xff1a; 作用&a…

2023第五届全国生物资源提取与应用创新论坛即将举办

01、会议背景 为进一步加强生物资源提取行业交流与合作&#xff0c;促进业“产学研用”融合&#xff0c;提升行业科技创新水平&#xff0c;增强行业国际竞争力&#xff0c;中国生物发酵产业协会、浙江科技学院、浙江工业职业技术学院、浙江省农业生物资源生化制造协同创新中心&…

GFLv2 论文学习

1. 解决了什么问题&#xff1f; 预测定位质量对于目标检测很重要&#xff0c;在 NMS 时它能提供准确的得分排序&#xff0c;提高模型的表现。现有方法都是通过分类或回归的卷积特征来预测定位质量得分。 2. 提出了什么方法&#xff1f; 受到 GFLv1 的 general distribution …

Mysql 主从复制、读写分离

目录 一、前言&#xff1a; 二、主从复制原理 2.1 MySQL的复制类型 2.2 MySQL主从复制的工作过程 2.2.1 MySQL主从复制延迟 2.3 MySQL 三种数据同步方式 2.3.1、异步复制&#xff08;Async Replication&#xff09; 2.3.2、同步复制&#xff08;Sync Replication&#…

【基于CentOS 7 的iscsi服务】

目录 一、概述 1.简述 2.作用 3. iscsi 4.相关名称 二、使用步骤 - 构建iscsi服务 1.使用targetcli工具进入到iscsi服务器端管理界面 2.实现步骤 2.1 服务器端 2.2 客户端 2.2.1 安装软件 2.2.2 在认证文件中生成iqn编号 2.2.3 开启客户端服务 2.2.4 查找可用的i…

微服务远程调用openFeign简单回顾(内附源码示例)

目录 一. OpenFeign简介 二. OpenFeign原理 演示使用 provider模块 消费者模块 配置全局feign日志 示例源代码: 一. OpenFeign简介 OpenFeign是SpringCloud服务调用中间件&#xff0c;可以帮助代理服务API接口。并且可以解析SpringMVC的RequestMapping注解下的接口&#x…

在拦截器中使用redis报错空指针

问题 当在拦截器中使用 redis 时&#xff0c;获取不到 RedisTemplate 对象 原因 拦截器在SpringContext初始化之前就执行了&#xff0c;即Bean初始化之前它就执行了&#xff0c;所以肯定是无法获取SpringIOC容器中的内容的 解决 提前实例化拦截器 在配置类里面先实例化拦截…

学C的第三十天【自定义类型:结构体、枚举、联合】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第二十九天【字符串函数和内存函数的介绍&#xff08;二&#xff09;】_高高的胖子的博客-CSDN博客 1 . 结构体 &#xff08;1&#xff09;. 结构体的基础知识&#xff1a; 结构…

怎么学习Java网络编程? - 易智编译EaseEditing

学习Java网络编程是掌握Java语言重要的一部分&#xff0c;它使得你能够开发网络应用、客户端/服务器应用以及与远程服务进行交互。以下是学习Java网络编程的一些建议&#xff1a; 学习基本的网络概念&#xff1a; 首先&#xff0c;你需要了解计算机网络的基本概念&#xff0c…

foreverlasting and fried-chicken hdu7293

Problem - 7293 题目大意&#xff1a;给出一个n个点&#xff0c;m条边的图&#xff0c;问其中包含了几个下面这样的子图 1<n<1000; 思路&#xff1a;我们要找两个点u,v&#xff0c;他们至少有4个公共点&#xff0c;且至少有一个点的度数至少为6&#xff0c;其中还要判断…

65英寸OLED透明屏的显示效果出色吗?

65英寸OLED透明屏是一种新型的显示技术&#xff0c;它采用有机发光二极管&#xff08;OLED&#xff09;作为显示元件&#xff0c;具有高亮度、高对比度、快速响应和广视角等优点。 与传统的液晶显示屏相比&#xff0c;OLED透明屏具有更高的透明度和更好的显示效果。 OLED透明屏…

Emacs之改造最快文本搜索工具ripgrep(一百一十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…