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

news2024/11/24 20:04:13

目录

 一、线性结构的定义

二、线性表的表示

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

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)

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

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

相关文章

python爬虫基础入门——利用requests和BeautifulSoup

(本文是自己学习爬虫的一点笔记和感悟) 经过python的初步学习,对字符串、列表、字典、元祖、条件语句、循环语句……等概念应该已经有了整体印象,终于可以着手做一些小练习来巩固知识点,写爬虫练习再适合不过。 1. 网页基础 爬虫的本质就是从网页中获取所需的信息,对网…

优化帮助与支持中心,提升客户满意度

在竞争激烈的商业环境中&#xff0c;提供良好的客户体验和有效的支持服务是企业获得成功的关键因素之一。优化帮助与支持中心的设计和运营对于提升客户满意度至关重要。本文将探讨如何通过优化帮助与支持中心来提升客户满意度&#xff0c;并为企业带来更多的商业机会。 提供多…

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析

以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病&#xff08;以下简称慢性病&#xff09;已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&#xff0c;慢性病的患病率持续攀升。众所周知&#xff0c;健康状况与年龄、饮食习惯、…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 25 日论文合集)

文章目录 一、分割|语义相关(17篇)1.1 Semi-Supervised Medical Image Segmentation with Co-Distribution Alignment1.2 CTVIS: Consistent Training for Online Video Instance Segmentation1.3 SL: Stable Learning in Source-Free Domain Adaption for Medical Image Segme…

16_LinuxLCD驱动

目录 Framebuffer设备 LCD驱动简析 LCD驱动程序编写 LCD屏幕参数节点信息修改 LCD 屏幕背光节点信息 使能Linux logo显示 设置LCD作为终端控制台 Framebuffer设备 先来回顾一下裸机的时候LCD驱动是怎么编写的,裸机LCD驱动编写流程如下: 1.初始化I.MX6U的eLCDIF控制器,…

【代码随想录day19】找树左下角的值

题目 思路 这题最直观的方法就是用层序遍历&#xff0c;记录一下每一层的左边第一个节点&#xff0c;这样整个层序遍历一遍就能找到最后一行最左边的节点。这里要注意最左边的节点不一定是父节点的左子节点&#xff01;&#xff01;&#xff01;如果最后一行没有左子节点&…

M5ATOMS3基础01按键

initinputoutput Linux环境Arduino IDE中配置ATOM S3 示例 官方示例代码&#xff1a; /* ******************************************************************************* * Copyright (c) 2022 by M5Stack * Equipped with M5AtomS3 sample source c…

Redis过期策略和内存淘汰策略

过期策略 过期策略是指Redis设置过期时间且key已经到达过期时间时删除该key&#xff0c;一般有定期删除和惰性删除&#xff1b; 定期删除是指每隔固定时间扫描key&#xff0c;对已经过期的key做清除操作&#xff1b; 定期删除时并不会实际对key做全量扫描&#xff0c;而是随机…

数字时代下CIO们如何做到业务增长和安全“双手抓”

7月22日&#xff0c;由福建信息主管(CIO)网主办的品牌企业业务增长与CIO进化之道暨福建CIO网20周年&#xff08;厦门&#xff09;产业数字化供需见面会在厦门顺利举办。 作为国内云原生安全领导厂商&#xff0c;安全狗也收到邀请出席此次活动。 厦门服云信息科技有限公司&…

Python实战案例:轻松采集微博评论,揭示网络舆论热点!

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 模块使用: requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 第三方模块安装&#xff1a; win R 输入cmd 输入安装命令 pip install 模块名 (如果你…

Android平台如何实现第三方模块编码后(H.264/H.265/AAC/PCMA/PCMU)数据实时预览播放

技术诉求 我们在做GB28181设备对接模块和RTMP直播推送模块的时候&#xff0c;遇到这样的技术需求&#xff0c;设备&#xff08;如执法记录仪&#xff09;侧除了采集传统的摄像头外&#xff0c;还需要对接比如大疆等第三方数据源&#xff0c;确保按照GB28181规范和RTMP协议规范…

使用百度地图SDK计算距离

说明&#xff1a;通过百度地图提供的SDK&#xff0c;可以计算出两个地点之间的距离&#xff0c;另外还有行驶路线等等。本文介绍如果使用百度地图SDK&#xff0c;并用java代码实现。 申请 首先需要登录百度地图的官网&#xff0c;申请开发者认证&#xff0c;个人认证一般都很…

装饰模式-扩展系统功能

买了新车后&#xff0c;不少人会对车进行装饰&#xff0c;比如给车贴膜&#xff0c;喷上骚粉的漆等。某天&#xff0c;小李和小张都买了辆车&#xff0c;小李想给车贴膜&#xff0c;小张想给车先喷漆然后再贴膜。现在中的做法是&#xff0c;把车开到改装店&#xff0c;如果要喷…

统一观测丨使用 Prometheus 监控 Cassandra 数据库最佳实践

作者&#xff1a;元格 本篇内容主要包括四部分&#xff1a;Cassandra 概览介绍、常见关键指标解读、常见告警规则解读、如何通过 Prometheus 建立相应监控体系。 Cassandra 简介 Cassandra 是什么&#xff1f; Apache Cassandra 是一个开源、分布式、去中心化、弹性可伸缩、…

day44-Spring_AOP

0目录 1.2.3 1.Spring_AOP 实体类&#xff1a; Mapper接口&#xff1a; Service和实现类&#xff1a; 测试1&#xff1a; 运行后&#xff1a; 测试2&#xff1a;无此型号时 测试3&#xff1a;库存不足时 解决方案1&#xff1a;事务声明管理器 测试&#xff1a…

【从零开始学习JAVA | 第三十篇】方法引用

前言&#xff1a; 方法引用作为一个重要的知识点&#xff0c;虽然他使用起来很复杂&#xff0c;而且会降低代码的可读性&#xff0c;但是如果用好了方法引用&#xff0c;我们也会获得不错的效率&#xff0c;因此我们在今天将为大家讲解什么是方法引用。 方法引用&#xff1a;…

J-Flash合并多个bin文件

文章目录 1. 前言2. 下载 J-Flash 工具3. 合并3个bin文件3.1 Booloader.bin3.2 APP1.bin3.3 APP2.bin3.4 保存 → 导出合并bin文件3.5 未用到的区域会被填充为 FF 4. 欢迎纠正~ 1. 前言 下面介绍用J-Flash工具合并多个bin文件的方法 2. 下载 J-Flash 工具 在下载Jink驱动的…

excel 生成sql技巧

"update 表名 set 字段名"&A2&" where 字段名"&B2&";"

最小栈,设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

题记&#xff1a; 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶…

交换机和终端设备的基本配置

1 IOS访问 1.1 操作系统 所有终端设备和网络设备都需要有操作系统 (OS)。如图所示&#xff0c;操作系统中直接与计算机硬件交互的部分称为内核。与应用程序和用户连接的部分则称为外壳。用户可以使用命令行界面 (CLI) 或图形用户界面 (GUI) 与外壳交互。 使用 CLI 时&#xf…