数据结构与算法2-1 线性顺序存储

  线性表顺序结构,非链式:

包含两个部分:

          1.数组内存放的是要存储的数据,同时给出最大容量;

                                   2.最后一个数据的下标,由此可知实际存储的数据总数。

结构体描述:

typedef struct()
    {
      double data[max];//最多能存储的总数,表的最大容量
      int last;//last 是实际存储数据的最后一个的下标;
    }List;

List *Ptrl;
Ptrl->last+1 是存储的数据总数,即表的实际长度

 

    数据表效果如图,要注意第几个数与下标之间的+1关系,避免代码出错:

       

    建立空表函数,注意申请内存需要强制转换,否则是空指针的结构

List *Makeempty()
{
    List *Ptrl;
    Ptrl=(List *)malloc(sizeof(List));
    Ptrl->last=-1;//空表
    return Ptrl;        

}

    查找数据函数

int find(double x,List *Ptrl)
{  int i=0;
   while(Ptrl->data[i]!=x && i<=Ptrl->last)
      i++;
   if(i>Ptrl->last) return -1;
   else return i;
}

    

    插入函数,插入第i(1<=i<=last+2)个数据,即可以在下标0--last+1的位置上插入:

double x,int i, List *Ptrl)
{
    int j;
    if(Ptrl->last==max-1) {printf("full"); return;}//表内已经有max个数据
    if(i<1 || i>Ptrl->last+2) {printf("error"); return;}//只能插入第1个数到last+2个数
    for(j=Ptrl->last; j>=i-1; j--)
       Ptrl->data[j+1]=Ptrl->last[j];
       ptrl->data[i-1]=x;
       Ptrl->last++;//存储实际数据个数加1,下标加1,注意更新数据总数
     return;
}            

    删除函数,删除第i个(1<=i<=last+1)数据,即可以删下标0-last的数据

void delete(int i,List *Ptrl)
{    int j;
        if(Ptrl->last==-1) {printf("empty"); return;}
         if(i<1||i>Ptrl->last+1) {printf("error"); return;}
    for(j=i-1;j<Ptrl->last;j++)
        Ptrl->data[j]=Ptrl->data[j+1];
    Ptrl->last--;//实际存储数据个数-1,下标-1,注意更新数据总数
    return;
}
时间: 2024-10-07 10:47:01

数据结构与算法2-1 线性顺序存储的相关文章

数据结构与算法 Chapter 2 线性表

2.1 线性表定义 线性表是由长度为n的一组节点组成的有限序列,其中除了首末结点之外,每个结点都有直接的前驱结点和后继结点. 2.2 线性表的顺序存储结构 顺序存储结构使用一组连续的存储单元来存储线性表. 其特点有:线性表的逻辑顺序与物理顺序一致.数据元素之间的关系采用物理位置的相邻来表示.其可以随机存取,常用一维数组表示: #include <iostream> using namespace std; template<class Elem> class Alist { pri

数据结构与算法知识大纲

数据结构与算法 1.线性结构 (1)线性表 ①线性表的定义 ②线性表的存储结构 ③线性表的应用 (2)栈和队列 ①栈 ②队列 (3)串 ①串的定义及基本运算 ②串的存储结构 2.数组和矩阵 (1)数组 (2)矩阵 3.树和图 (1)树 ①树的定义 ②二叉树的定义和基本运算 ③二叉树的性质 ④二叉树的存储结构 ⑤二叉树的遍历 ⑥最优二叉树 ⑦二叉查找树 (2)图 ①图的定义及术语 ②图的存储结构 4.常用算法 (1)算法概述 ①算法的基本概念 ②算法与数据结构 ③算法的描述 ④算法效率 (2)排序

数据结构与算法之线性表

前言 上一篇<数据结构和算法之时间复杂度和空间复杂度>中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行了一一说明.这一篇主要介绍线性表. 线性表属于数据结构中逻辑结构中的线性结构.回忆一下,数据结构分为物理结构和逻辑结构,逻辑结构分为线性结构.几何结构.树形结构和图形结构四大结构.其中,线性表就属于线性结构.剩余的三大逻辑结构今后会一一介绍. 线性表 基本概念 线性表(List):由零个或多个数据元素组成的有限序列. 注意: 1.线性表是一个序列. 2.0个元素构成的线性表是空表.

数据结构与算法 1 :基本概念,线性表顺序结构,线性表链式结构,单向循环链表

[本文谢绝转载] <大纲> 数据结构: 起源: 基本概念 数据结构指数据对象中数据元素之间的关系  逻辑结构 物理结构 数据的运算 算法概念: 概念 算法和数据结构区别 算法特性 算法效率的度量 大O表示法 时间复杂度案例 空间复杂度 时间换空间案例 1)线性表: 线性表初步认识: 线性表顺序结构案例 线性表顺序结构案例,单文件版 线性表的优缺点 企业级线性表链式存储案例:C语言实现 企业级线性表链式存储案例:C语言实现 单文件版 企业级线性表链式存储案例,我的练习  线性表链式存储优点缺点

第2章 线性表《C#数据结构和算法》

( 1)除第一个位置的数据 元素外,其它数据元素位置的前面都只有一个数据元素:( 2)除最后一个位置的 数据元素外,其它数据元素位置的后面都只有一个元素.也就是说,数据元素是 一个接一个的排列.因此,可以把线性表想象为一种数据元素序列的数据结构. 2.1.1 线性表的定义 线性表(List) 线性表的接口如下所示. public interface IListDS<T> { int GetLength(); //求长度 void Clear(); //清空操作 bool IsEmpty();

数据结构与算法-线性表

近期在学习数据结构,反反复复已经看过几遍了,也做了一些练习题,但总感觉不记录一下,思路就不是很清晰,所以,从今天开始总结这段时间对数据结构的学习. 无论学习什么,基础知识都是最总要的,数据结构也不例外.线性表就是数据结构的基础,很多常见的数据结构都是基于线性表来实现的. 那么,什么是线性表呢?官方的定义是: 零个或多个数据元素的有限序列 可以从两个方面来理解线性表,首先它是一个序列,也就是其中的元素有先后顺序,其次是有限的,对于无线数列,也只能存在于理论数学中. 说了这么多,小结一下: 1)线性

C++数据结构与算法_2_线性表 --顺序表的应用示例

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca

数据结构与算法—线性表详解

前言 通过前面数据结构与算法前导我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容.当然,我用自己的理解解分享给大家. 其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系! 线性表:逻辑结构, 就是对外暴露数据之间的关系,不关心底层如何实现. 顺序表.链表:物理结构,他是实现一个结构实际物理地址上的结构.比如顺序表就是用数组实现.而链表用指针完成主要工作.不同的结构在不同的场景有不同的区别. 对于java来说,大家都知道List接口类型,这就是逻辑结构,

数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 树 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树 二叉树的创建,关系建立 二叉树的创建,关系建立2 三叉链表法 双亲链表: 二叉树的遍历 遍历的分析PPT 计算二叉树中叶子节点的数目:使用全局变量计数器 计算二叉树中叶子节点的数目:不使用全局变量计数器 无论是先序遍历,中序遍历,后序遍历,求叶子的数字都不变;因为本质都是一样的,任何一个节点都会遍历3趟 求二叉树的高度 二叉树的拷