线性表----顺序表

线性表的定义

线性表是具有相同数据类型的n个数据元素的有限序列

逻辑特性

除第一个元素外,每个元素只有一个前驱,除最后一个元素外,每个元素都有一个后继

物理结构

线性表的存储结构有顺序存储结构和链式存储结构,前者称为顺序表,后者称为链表。

顺序表

线性表的顺序存储又称顺序表。特点是用一组地址连续的存储单元依次存储数据,从而使逻辑相邻的两个元素在物理地址上也相连。

#define MaxSize 50		//定义线性表最大长度
typedef int ElemType;		//定义数据类型typedef struct{ElemType data[MaxSize];	//用一维数组来存储数据int length;							//定义线性表的当前长度
}SqList;

上面是用一位数组是静态分配,也可以用动态分配

#define InitSize 100
typedef struct{
ElemType *data;
int MaxSize,length;
}SqList;

顺序表特点

  • 随机访问
  • 存储密度高,因为物理地址连续

基本操作

1、插入

在顺序表L的第i个位置插入新元素e,如果插入位置i不合法,则返回false;如果顺序表满了,返回false;否则,将顺序表的第i个元素及其后所有的元素右移一位

bool ListInsert(SqList& L, int i, ElemType e)
{if (i<1 || i>L.length + 1)	//此处注意是length+1,不能是MaxSizereturn false;if (L.length >= MaxSize)return false;for (int j=L.length;j>=i;j--){L.data[j] = L.data[j-1];}L.length++;return true;
}

时间复杂度问题:
下面理解的时候,可以将n理解为length

  • 最好情况下:在表尾插入,即i=n+1,后移语句不会执行,时间复杂度为T(n)=0(1);
  • 最坏情况:在表头插入,即i=1,后移n次,时间复杂度为0(n)
  • 平均情况:p=1/(n+1),时间复杂度为0(n)
    在这里插入图片描述
2、删除操作

删除顺序表L中第i个位置的元素,若成功则返回true,并将被删除的元素返回,否则返回false

  • 判断i的值是否正确
  • 取删除的元素
  • 将被删除元素后面的所有元素依次向前移动一位
bool ListDelete(SqList& L, int i, ElemType& e) {if (i<1 || i>L.length)return false;e = L.data[i - 1];for (int j = i; j < L.length; j++)L.data[j - 1] = L.data[j];L.length--;return true;
}

时间复杂度

  • 最好情况:删除表尾元素(i=n),无序移动,时间复杂度为0(1)
  • 最坏情况:删除表头元素(i=1),需要移动第一个元素外所有的元素,时间复杂度为0(n)
  • 平均情况:时间复杂度为0(n)
3、按值查找

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

int LocateElem(SqList& L, ElemType e) {for (int i = 0; i < L.length; i++) {if (L.data[i] == e)return i + 1;}return 0;
}

时间复杂度

  • 最好情况:第一个元素就是,在表头,T(n)=0(1)
  • 最坏情况:查找元素在表尾或者不存在时,需要比较n次,时间复杂度为0(n)
  • 平均情况:T(n)=0(n)

缺点

顺序表的移动、删除需要移动很多的元素,影响运行效率

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

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

相关文章

python各种语言间时间的转化

一 基本知识millisecond 毫秒microsecond 微秒 nanosecond 纳秒1秒1000毫秒 1毫秒1000微秒 1微秒1000纳秒二 perlperl中可以使用time或localtime来获得时间&#xff0c;time返回从1970年1月1日0点的秒数&#xff0c;localtime返回当前时间的字符串表示&#xff0c;或者年月日等…

javascript小技巧

事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey 事件返回值 event.returnValue 鼠标位置 event.x event.…

树、二叉树、二叉搜索树_检查二叉树是否为BST(二叉搜索树)

树、二叉树、二叉搜索树Description: 描述&#xff1a; This article describes how to check whether a given tree is BST or not? This problem came in coding round of Microsoft. 本文介绍如何检查给定的树是否是BST &#xff1f; 这个问题来自微软的编码回合。 Probl…

兄弟郊游问题

描述 兄弟俩骑车郊游&#xff0c;弟弟先出发&#xff0c;每分钟X米&#xff0c;M分钟后&#xff0c;哥哥带一条狗出发。以每分钟Y米的速度去追弟弟&#xff0c;而狗则以每分钟Z米的速度向弟弟跑去&#xff0c;追上弟弟后又立即返回&#xff0c;直到哥哥追上弟弟时&#xff0c;…

栈溢出利用-----jmp esp

通过jmp esp利用栈溢出&#xff0c;首先我们要找出jmp esp 的地址&#xff0c;因为系统不同&#xff0c;通用jmp esp的地址可能不同&#xff0c;下面的代码是找出jmp esp的地址的&#xff1a; #include<windows.h> #include<iostream.h>#include<tchar.h> i…

android 队列上传图片,话说android端七牛图片上传

七牛图片上传业务流程如下图(这是官方的图)&#xff1a;由上图可知&#xff0c;要想实现图片上传&#xff0c;是要三端进行交互的(我刚刚开始以为只要七牛服务器跟客户端交互就行)接下来步骤如下&#xff1a;1、首先肯定是要有一个七牛的账号&#xff0c;并创建一个空间2、客户…

在.NET中得到计算机硬件信息的一些功能

得到显示器分辨率 Dim X As Short System.Windows.Forms.Screen.PrimaryScreen.Bounds.WidthDim Y As Short System.Windows.Forms.Screen.PrimaryScreen.Bounds.HeightMsgBox("您的显示器分辨率是&#xff1a;" & X & " X " & Y) 得到特殊文…

GridView 利用AspNetPager 分页时的自动编号

GridView 利用AspNetPager 分页时的自动编号 <%# (this.WillisPager1.CurrentPageIndex-1) * this.WillisPager1.PageSize Container.DataItemIndex 1%> 转载于:https://www.cnblogs.com/waren168/archive/2011/07/18/2109305.html

bst 删除节点_C ++程序查找具有N个节点的BST数量(加泰罗尼亚编号)

bst 删除节点Problem statement: C program to find number of binary search trees with n nodes. 问题陈述&#xff1a; C 程序查找具有n个节点的二进制搜索树的数量。 Input format: single integer n 输入格式&#xff1a;单整数n Constraints: 0<n<15 约束&#x…

线性表----链式表

定义 线性表的链式存储又称单链表&#xff0c;它是指通过任意的存储单元来存储线性表的数据。注意此时的数据在物理地址上不在连续&#xff0c;内存是动态分配的&#xff0c;而且数据是存放在结点中&#xff0c;结点组成链表&#xff0c;每个节点分为数据域和指针域&#xff0…

奋斗的小蜗牛

描述 传说中能站在金字塔顶的只有两种动物&#xff0c;一种是鹰&#xff0c;一种是蜗牛。一只小蜗牛听了这个传说后&#xff0c;大受鼓舞&#xff0c;立志要爬上金字塔。为了实现自己的梦想&#xff0c;蜗牛找到了老鹰,老鹰告诉它金字塔高H米&#xff0c;小蜗牛知道一个白天自…

android intent实验,Android开发课程实验报告③ intent的使用

Android开发课程实验报告author&#xff1a;065实验四&#xff1a;intent实验报告目录实验目的初学移动应用公开发中的Android开发&#xff0c;实验四的主要内容为intent的使用&#xff0c;通过这一次实验&#xff0c;掌握基本的intent使用方法。具体实验分析实验第一步&#x…

[职场生存]细节和感觉[一]

zhengyun 200701 刚刚进入软件行业的时候&#xff0c;我特别喜欢问那些我眼中的强人一个问题&#xff1a;“怎么让自己比别人更快更强?”那时候真的是感觉“一万年太久&#xff0c;只争朝夕”。 下面挑出其中我认为很重要的两点和大家分享。这两点适用于技术人员乃至于不同行业…

程序开发基础学习四(boost::signal2 函数学习)

在游戏编程中&#xff0c;新的策划需求总是在迭代不停。。。。。。&#xff0c;对于游戏程序员肯定深有感触吧&#xff0c;遇到这种情况咱只能小小的抱怨下&#xff0c;活还得干。尤其是遇到耦合到很多类的时候&#xff0c;要是直接实现不加抽象的话&#xff0c;那咱的代码就要…

array.tolist_在Python中使用array.tolist()将数组转换为列表

array.tolistGiven an array with some elements and we have to convert them to the list using array.tolist() in Python. 给定一个包含一些元素的数组&#xff0c;我们必须使用Python中的array.tolist()将它们转换为列表。 创建一个数组 (Creating an array) To create a…

利用xor给shellcode加壳

首先看我们的shellcode&#xff0c;执行弹出cmd 没有shellcode&#xff1a; #include "stdio.h" #include "windows.h" #include <string.h> #include "stdlib.h"int main(int argc, char* argv[]) {printf("begin\n");HINSTAN…

华为mate50鸿蒙,华为Mate50Pro首次曝光,5000mAh+鸿蒙OS+120Hz,太强

自从去年九月份以来&#xff0c;关于华为旗舰的消息越来越少了&#xff0c;主要的原因想必大家也是知道的。现在华为究竟还能不能继续正常发布新旗舰&#xff0c;答案也很微妙&#xff0c;不过我们可以肯定的是&#xff0c;华为绝不会放弃手机业务&#xff0c;这是余承东多次亲…

数数小木块

描述 在墙角堆放着一堆完全相同的正方体小木块&#xff0c;如下图所示&#xff1a; 因为木块堆得实在是太有规律了&#xff0c;你只要知道它的层数就可以计算所有木块的数量了。 现在请你写个程序 给你任一堆木块的层数&#xff0c;求出这堆木块的数量. 输入 第一行是一个整…

sql server 2000 以前的某个程序安装已在安装计算机上创建挂起的文件操作解

好久没弄VS了&#xff0c;今天因为要改客户的网站&#xff0c;又装起来VS2003&#xff0c;先要装一下MSSQL&#xff0c;忘了原先自己的电脑不能装MSSQL企业版&#xff0c;今天下了个企业版&#xff0c;才知道白下了&#xff0c;装不起来&#xff0c;后来又弄了个MSSQL ED 版&am…

HDOJ 1896 Stones 解题报告

题目分类&#xff1a;优先队列STL作者&#xff1a;ACShiryu做题时间&#xff1a;2011-7-18Stones Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 217 Accepted Submission(s): 107 Problem DescriptionBecause…