List-----Array
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的更多相关文章
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- ES5对Array增强的9个API
为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...
- JavaScript Array对象
介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- javascript之活灵活现的Array
前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...
- 5.2 Array类型的方法汇总
所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ...
- OpenGL ES: Array Texture初体验
[TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ...
- Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
- C++ std::array
std::array template < class T, size_t N > class array; Code Example #include <iostream> ...
随机推荐
- Python 第一课笔记
1.Hello World程序的两种方法 在windows下执行 1.编辑器里输入,不用编译 print("Hello World!") 直接就可以运行 2.可以 ...
- js、jquery对节点的操作(增、删)
js对节点的操作方法 一.获取 1.父节点的获取 某节点的parentNode属性值即为该节点的父节点.示例: var parent = document.getElementById("o ...
- fiddler抓包使用①
链接:http://jingyan.baidu.com/article/3a2f7c2e0d5f2126aed61175.html 设置好代理后,有的设备需要访问"192.168.1.1 ...
- C#中Invoke的用法
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫"打开",单击之后按钮上的文本显示 ...
- 查看源码利器之sublime text 3 配置 Ctags 插件
最近在看源码的时候发现sublime text 3是很给力的一款软件,小巧精致,这里着重讲解一下Ctags协助编译和跟踪函数 一.安装Package Control (如果Preferences &g ...
- HDU 5867 Water problem
处理出1-99的,之后的加上多少hundred和and即可.整百和一千的时候注意一下. #pragma comment(linker, "/STACK:1024000000,10240000 ...
- HDU1789Doing Homework again(贪心)
Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of h ...
- 检索字符创 php
strstr()可以返回匹配的值 echo strstr("localhost", "os");返回ost echo substr_count("gg ...
- dubbo 的monitor监视器安装问题——————monitor一直处于正在启动状态
一台服务器安装完zookeeper并启动后,然后在另一服务器安装monitor dubbo-monitor-simple-2.8.3 解压安装 修改配置文件 dubbo.container= ...
- C程序浅议
文件FILE是程序设计中的一个重要概念.所谓“文件”一般是指存储在外部介质上的数据的集合.操作系统是以文件为单位对数据进行管理的,而文件是以文件名为标识的.操作系统对文件实行“按名存取”. C语言把文 ...