1、Definition

Arry数组是一种连续储存的List

储存方式:将线性表中的元素一次储存在连续的储存空间中。

Computer's logical structure:
逻辑位置上相邻的元素在物理位置上也相邻

2、Implementation

template<class List_entry>
class List
{
public:
List();
int size();
bool full();
bool empty();
...
protected:
int last;
List_entry entry[max_list];
};

3、Operations

(1)Insert element e at i

InsertElem(L, e, i)
input: i:location, e: ElementType;
Pre-condition: 1<=i<=L.last+1;
Pos-condition: insert element e at i and add 1 to last;
----------------------------------------------------------------------------------------- int InsertElem(List *L, DataType e, int i)
{
if(((*L).last)>=(maxsize-1))
{
cout<<"overflow"<<endl;
return ERROR; //溢出
}
else if((i<0)||(i>((*L).last+1)))
{
cout<<"ERROR"<<endl;
return ERROR; //非法位置
}
else
{
for(int j=((*L).last);j>=i;j--)
(*L).data[j+1]=(*j).data[j];
(*L).data[i]=e;
(*L).last+=1;
return(1);
}
}

(2)Delete element e at location i

DeleteElem(i)
input: i: location
Pre-condition: 0<=i<=last;
Pos-condition: delete the element at location i and last-1;
---------------------------------------------------------------------------------------------
int Delete(List *L, int i)
{
if(((*L).last)>=(maxsize-1))
{
cout<<"overflow"<<endl;
return ERROR; //溢出
}
else if((i<0)||(i>((*L).last+1)))
{
cout<<"ERROR"<<endl;
return ERROR; //非法位置
}
else
{
for(int j=i;j<((*L).last);j++)
(*L).data[j]=(*L).data[j+1];
(*L).last-=1;
return (1);
}
}

Insert and delete

delete:

最好情况为删除最后一个元素,其他元素不用移动,时间复杂度为O(1)

最坏情况为删除第一个元素,要移动所有元素,时间复杂度为O(N)

insert:

最好情况为在最后一个位置插入,其他元素不用移动,时间复杂度为O(1)

 最坏情况为在第一个位置插入,要移动所有元素,时间复杂度为O(N) 

(3)Search

按值查找

Search(e, i)
input: e:ElementType;
output: i:location;
Pre-condition: L is not empty;
Pos-condition: output the location of e;
-----------------------------------------------------------------------
int Search(List *L, DataType e)
{
for(int i=0;i<=((*L).last);i++)
if(((*L).data[i])==e)
return i;
return 0;
}

按位查找

Search(i)
input: i:location;
output: e:ElementType;
Pre-condition: 0<=i<=last;
Pos-condition: output the element in the location i;
----------------------------------------------------------------------------------------
DataType Search(List *L, int i)
{
if((i<0)||(i>(*L).last+1))
{
cout<<"ERROR"<<endl;
return NULL;
}
return (*L).data[i];
}

4、Analysis of Array

Advantages:

顺序表的结构比较简单,储存效率高,无需储存元素之间的关系

Disadvantages:

在进行插入和删除操作时时间复杂度高

对长度较大的线性表,须预先分配较大的的空间或经常扩充线性表,不方便。

List-----Array的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. ES5对Array增强的9个API

    为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...

  3. JavaScript Array对象

    介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...

  4. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  5. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  6. javascript之活灵活现的Array

    前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...

  7. 5.2 Array类型的方法汇总

    所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ...

  8. OpenGL ES: Array Texture初体验

    [TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ...

  9. Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  10. C++ std::array

    std::array template < class T, size_t N > class array; Code Example #include <iostream> ...

随机推荐

  1. TCP和UDP报文分片的区别

    搞了三年网络,今天才知道这个细节,汗,总结下: MTU大家都知道,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节.一个IP数据报在以太网中 传输,如果它的长度大于该MTU ...

  2. 基于HTML5 的WebSql本地设备数据库

    HTML5 的 Web SQL Database 用本地和会话存储实现简单的对象持久化,对繁琐的关系数据进行处理. 在 W3C 的 Web SQL Database 规范中(参照 介绍)有这样的描述: ...

  3. HP Autonomy KeyView入门使用&Maven打包流程

    正文:使用自带的KeyView.jar可能报各种各样的错误,比如no manifest,找不到main方法等等,这里需要自己把需要用到的Filter类和KeyView.jar一起打包,并修改manif ...

  4. JavaScript创建读取cookie代码示例【附:跨域cookie解决办法】

    使用JavaScript 原生存取cookie代码示例: var cookie = { set : function(name, value, expires, path, domain, secur ...

  5. 使用PowerDesigner创建mysql数据库表图

    使用PowerDesigner 建数据库表. 一直很忙,没有时间写东西.这次搞点会声会色的,嘿嘿 此技能为项目经理必备技能. 本次主角: 1.在workspace下建立一项目: physical da ...

  6. python zipfile 文件压缩和文件

    文件压缩 zipfile_obj = zipfile.ZipFile(zipfile_objpath, 'a', zipfile.ZIP_DEFLATED) for dirpath, dirnames ...

  7. DHCP底层参考

    [原创翻译,水平有限] ISC DHCP支持802.1的以太网帧,令牌环和FDDI等网络.为了桥接物理层和DHCP层,它还必须实现IP和UDP协议帧. 这源于UNIX BSD socket 对未配置接 ...

  8. C#使用IHttpModule接口修改http输出的方法浅谈

    一.但你每次请求浏览一个页面,比如Login.aspx的时候,都会执行配置文件中system.webserver内的model这个节点的东西(这个是属于遍历的逻辑执行,会将model这个节点的东西全部 ...

  9. (转)提高代码质量---one

    1. 摘要 这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣. 在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao ...

  10. Java Object 对象创建的方式 [ 转载 ]

    Java Object 对象创建的方式 [ 转载 ] @author http://blog.csdn.net/mhmyqn/article/details/7943411 显式创建 有4种显式地创建 ...