//顺序表节点的定义
typedef struct
{
datatype data[MAXSIZE]; //数组容量的上限
int len; //记录最后一个元素的位置,相当于一个指针,表空时len=-1
}SeqList;
SeqlLst L; //定义一个顺序表L,表长n = L.len+1
SeqList *L; //定义一个指向Seqlist类型的指针,L为指针变量,即顺序表的首地址 //顺序表的初始化(initialize)
SeqList *Init_SeqList()
{
SeqList *L;
L = malloc(sizeof(SeqList)); //动态分配存储空间
L->len = -;
return L;
} //插入操作(指在表的第i个位置前插入值为e的新元素,i的有效范围1<=i<=n+1,时间复杂度O(n))
int Insert_SeqList(SeqList *L, int i, datatype e)
{
int j;
if(L->len == MAXSIZE-)
{
printf("表满溢出"); return -; //表空间已满,不能插入
}
if(i< || i>L->len + ) //检查插入位置i是否有效
{
printf("位置错"); return ;
}
for(j = L->len; j > i-; j--) //在数组中,第i个元素的下标为i-1
L->data[j+] = L->data[j]; //节点往后移动一个位置
L->data[k-] = e; //插入新元素e
L->len++; //len仍指向最后一个元素
return ; //插入操作成功,返回
} //删除操作(指将中第i个位置从线性表中删除掉,i的有效范围1<=i<=n,时间复杂度O(n))
int Delete_SeqList(SeqList *L, int i)
{
int j;
if(i< || i>L->len + ) //检查空表及删除位置的合法性
{
printf("不存在第i个元素"); return ;
}
for(j = i; j <= L->len; j++)
L->data[j-] = L->data[j]; //节点向前移动一个位置
L->len--;
return ; //删除成功
} //按值查找(指在线性表中查找是否存在与给定值相等的数据元素,时间复杂度O(n))
int Locate_SeqList(SeqList *L, datatype e)
{
int i = ;
while(i<=L.len && L->data[i] != e)
i++;
if(i > L->len) return -; //查找失败
else return ; //查找成功
} //取表中元素(指根据所给序号i在线性表中查找相应数据元素,时间复杂度O(1))
int Get_SeqList(SeqList *L, int i)
{
if(i < && i > L->len+) //检查查找位置的合法性
{
printf("不存在第i个元素"); return ;
}
else return L->data[i-];
}

算法思路:
1.插入操作
    (1)将an~ai顺序向后移动一个位置,即an移动到an+1的位置……ai移动到ai+1的位置,为待插入的新元素让出位置;
    (2)将e放到空出的第i个位置;
    (3)修改len指针,使之恒指向当前表中最后一个元素。
2.删除操作
    (1)将ai+1~an顺序向前移动一个位置;
    (2)修改len指针,使之仍指向当前表中最后一个元素。
3.按值查找
    从第一个元素a1起依次与e比较,直到找到一个与相等的数据元素为止,返回它在顺序表中的存储下标;
    若查遍整个表都没有找到与e相等的元素,则返回-1,表示查找失败。
4.取表中元素
    首先确认所查找数据元素序号是否合法,若合法则直接返回对应元素值。否则报错。

《数据结构》2.2顺序表(sequence list)的更多相关文章

  1. C++数据结构学习之顺序表

    顺序表是数据结构中最基本也是应用相当广泛的一种数据结构类型.它通常包含三个私有成分,即指向数据数组的头指针.当前表长以及表的实际容量.表的头指针通常指向数据数组的基地址,通过数组的形式进行访问数据数组 ...

  2. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  3. 【数据结构】之顺序表(C语言描述)

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

  4. C++ 数据结构学习一(顺序表)

    //SequentialList.h 顺序表模板类 #ifndef SEQUENTIAL_LIST_HXX#define SEQUENTIAL_LIST_HXX using std::cout; us ...

  5. 数据结构 单链表&顺序表

    顺序表: 一般使用数组(C语言中的数组采用顺序存储方式.即连续地址存储)来描述. 优点:在于随机访问元素, 缺点:插入和和删除的时候,需要移动大量的元素. 链表: 优点:插入或删除元素时很方便,使用灵 ...

  6. 数据结构——Java实现顺序表

    一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 ...

  7. 数据结构之线性顺序表ArrayList(Java实现)

    一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...

  8. 数据结构之动态顺序表(C实现)

    线性表有2种,分为顺序表和链表. 顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定) 链表: 有3种,单链表.双向链表.循环链表(长度不固定) seqList.h ...

  9. 【c++版数据结构】之顺序表的实现

    SeqList.h #ifndef SEQLIST_H #define SEQLIST_H #include<iostream> using namespace std; typedef ...

  10. 【C语言--数据结构】线性顺序表

    线性表的本质: 1.线性表(List)是零个或者多个数据元素的集合: 2.线性表中的数据元素之间是有顺序的: 3.线性表中的数据元素个数是有限的: 4.线性表中的数据元素的类型必须相同: 定义: 线性 ...

随机推荐

  1. JSP Filter用法

    1.filter的作用 在HttpServletRequest请求到达Servlet之前,拦截客户的HttpServletRequest 根据需要检查HttpServletRequest的相关信息,修 ...

  2. JS函数 计算 今日,昨日,本周,上周,本月

    最近有个功能会进行数据的筛选于是便写了几个快速计算 今日,昨日,本周,上周,本月 范围的function 以便以后遇到同样的问题可以直接进行复用,代码如下: /* *获取今日的起始和结束时间 *返回值 ...

  3. python两种生成md5的方法

    一. 使用md5包 import md5 src = 'this is a md5 test.' m1 = md5.new() m1.update(src) print m1.hexdigest() ...

  4. Tomcat内部结构及工作原理学习

    Tomcat原本是Servlet/JSP的一个调试工具,后来才发展为一个Servlet/JSP的容器. Tomcat作为Servlet容器,负责处理客户请求,把请求传送给Servlet并把结果返回给客 ...

  5. plist文件

    1.一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也称为“plist文件” 2.接下来通过代码来解析Plist文件中的 ...

  6. 手势(UIGestureRecognizer)

    通过继承 UIGestureRecognizer 类,实现自定义手势(手势识别器类). PS:自定义手势时,需要 #import <UIKit/UIGestureRecognizerSubcla ...

  7. session失效

    今天写页面时,使用了session 设置session后 跳转页面session就丢失 上网查了一下也没有很好的解决办法 也没有说原因. 在自己本地电脑上写了两个页面测试一下,完全正常.但是上传到服务 ...

  8. Strus2学习:基础(一)

    Strus2基础: Sturs2起源以及背景: 在起源很早(2002年左右)的 strus1 和 webWork 基础上进行扩展,并且兼容这两大框架!总之很好用啦,随着学习的深入,应该会有更好的诠释的 ...

  9. 用FireFox火狐浏览器的3D Tilt 插件查看网页3D视图效果

    逛博客发现了网页的3D视图效果,一搜原来是Firefox特有的一个功能,先看效果: 相当炫酷,接下来介绍如何实现. 1.首先安装3d tilt 插件: 从火狐浏览器的添加插件页面,搜索:3D Tilt ...

  10. c#winform程序退出的方法

    一共有4种方式: 1.this.Close();  只是关闭当前窗口,若不是主窗体,无法退出程序,另外若有托管线程(非主线程),也无法干净的退出: 2.Application.Exit();强制所有消 ...