数据结构-02 _用顺序表解决线性表的编程问题

看到这个标题,相必最先应该只到什么是顺序表,什么是线性表。

线性表(linear list):由n(n>=0)个相同的数据类型的数据元素(结点)a0,a1,a2,...an-1 组成的有限序列。

顺序表:把线性表的结构按照逻辑顺序存放在一组地址连续的存储单元里,用这种方式存储的线性表简称顺序表。

线性表的基本操作:

  1.初始化操作

  2.插入操作:InsertNode(T a,int i) 在线性表的第i个位置插入一个值为a的新元素,使得原序号为i,i+1,...,n 的数据元素的序号变成i+1,i+2,... n+1,插入后表长=原表长+1.

  3.删除操作:DeleteNode(int i) 在线性表中删除序号为i的数据元素,返回删除后的数据元素。使得原序号i+1,i+2,... n的数据元素序号变成i,i+1,...,n-1,删除后的表长=原表长-1.

  4.取表元素:SearchNode(int i) 获取线性表中第i个数据元素。

  5.定位元素:SearchNode(T value) 在线性表中查找值为value的数据元素,返回线性表首次出现value值得序号。

  6.求线性表长度:GetLength()

  7.清空线性表:Clear()

  8.判断线性表是否为空 IsEmpty()

根据上面线性表的操作我们可以定义操作线性表的接口了:

interface IlinarList<T>
{
   //插入元素
   void InsertNode(T a, int i);
   //删除元素
   void DeleteNode(int i);
   //查找表元素
   T SearchNode(int i);
   //定位元素
   T SearchNode(T value);
   //求表长度
   int GetLength();
   //清空操作
   void Clear();
   //判断线性表是否为空
  bool IsEmpty();
}

在顺序表中实现这个接口:

public class SeqList<T> : IlinarList<T>
    {
        /// <summary>
        /// 顺序表的最大容量
        /// </summary>
        private int maxsize{get;set;}
        /// <summary>
        /// 数组,存储顺序表中的数据元素
        /// </summary>
        private T[] data;
        /// <summary>
        /// 顺序表的实际长度
        /// </summary>
        private int length { get; set; }

        /// <summary>
        /// 初始化线性表
        /// </summary>
        /// <param name="size"></param>
        public SeqList(int size)
        {
            maxsize = size;
            data = new T[maxsize];
            length = 0;
        }
        //在顺序表的末尾追加数据元素
        public void InsertNode(T a)
        {
            if (IsFull())
            {
                Console.WriteLine("顺序表已满!");
                return;
            }
            data[length] = a;
            length++;
        }
        //在顺序表的第i个数据元素的位置插入一个数据元素
        public void InsertNode(T a, int i)
        {
            if (IsFull())
            {
                Console.WriteLine("顺序表已满!");
                return;
            }
            if (i < 1 || i > length + 1)
            {
                Console.WriteLine("Position is error!");
                return;
            }
            else
            {
                for (int j = length - 1; j >= i - 1; j--)
                {
                    data[j + 1] = data[j];
                }
                data[i - 1] = a;
            }
            length++;
        }
        //删除顺序表的第i个元素
        public void DeleteNode(int i)
        {
            if (IsEmpty())
            {
                Console.WriteLine("顺序表为空!");
                return;
            }
            if (i < 1 || i > length + 1)
            {
                Console.WriteLine("Position is error!");
                return;
            }
            for (int j = i; j < length; j++)
            {
                data[j - 1] = data[j];
            }
            length--;
        }
        //获取顺序表第i个数据元素
        public T SearchNode(int i)
        {
            if (IsEmpty() || (i < 1) || (i > length))
            {
                Console.WriteLine("List is empth or Position is error!");
                return default(T);
            }
            return data[i - 1];
        }
        //在顺序表中查找值为value的数据元素
        public T SearchNode(T value)
        {
            if (IsEmpty())
            {
                Console.WriteLine("List is Empty!");
                return default(T);
            }
            int i = 0;
            for(i=0;i<length;i++)
            {
                if (data[i].ToString().Contains(value.ToString()))
                {
                    break;
                }
            }
            if (i >= length)
            {
                return default(T);
            }
            return data[i];

        }
        //求顺序表的长度
        public int GetLength()
        {
            return length;
        }
        //清空顺序表
        public void Clear()
        {
            length = 0;
        }
        //判断顺序表是否为空
        public bool IsEmpty()
        {
            if (length == 0)
            {
                return true;
            }
            else return false;
        }
        //判断顺序表是否为满
        public bool IsFull()
        {
            if (length == maxsize)
            {
                return true;
            }
            else return false;
        }

    }

用顺序表是实现这些操作还是比较简单的,我们也可以把这些用到实际的解决问题当中去。

我将会写一个实际的应用场景.....

时间: 2025-01-12 11:26:14

数据结构-02 _用顺序表解决线性表的编程问题的相关文章

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

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

解决线性表的编程问题

第一章      解决线性表的编程问题 线性表是由n个(n≥0)个相同类型的数据元素(结点)a0,a1,-,an-1组成的有限序列 顺序存储结构的三个弱点: 1)  在进行插入或删除操作时,需要移动大量元素 2)  在给长度变化的线性表预先分配空间时,必须按最大空间分配,使存储空间不能得到充分利用 3)  容量难以扩充 链表是用一组任意的存储单元来存储线性表中的数据元素 存储数据元素本身信息的域称为结点的数据域 存储与它相邻的数据元素的存储地址信息的域称为结点的引用域 结点的引用域只存储该结点直

广义表(线性表的推广)

广义表的定义 广义表是线性表的推广. 广义表一般记作LS=(d0,d1,...dn-1) 其中,LS是广义表(d1,d2,...dn)的名称,n是它的长度.在线性表的定义中,ai(1<=i<=n)只限于是单个元素.而在广义表的定义中,di可以是单个元素.也可以是广义表,分别称为广义表LS的单元素和子表.习惯上,用大写字母表示广义表的名称,用小写字母表示单元素.当广义表LS非空时,称第一个元素d0为表头(Head),称其余元素组成的表(d1,d2,...dn-1)是LS的表尾(Tail). 显然

大话数据结构读书笔记系列(三)线性表

    转载请注明来源:http://blog.csdn.net/u010194538/article/details/51001353 第3章线性表 3.2 线性表的定义 线性表(List):零个或多个数据元素的有限序列. 元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继. 线性表强调是有限的. 在较复杂的线性表中,一个数据元素可以由若干个数据项组成. 3.4 线性表的顺序存储结构 线性表的顺序存储结构,指的是用一段地址连续的

数据结构学习小结2 (第二章:线性表)

一.小结(1)认为最重要的内容小结:1.链表和顺序表的操作的代码实现.(初始化.创建.取值.查找.删除.插入)2.线性表的应用:线性表的合并:有序表的合并3.一元多项式的和的代码实现. (2)其他杂七杂八的收获:1.更深理解了->的含义:->是指针的指向运算符,通常与结构体一起使用.[从小组成员上获得的收获]2.通过作业和视频学习了单链表的逆转的实现3.尾指针不为空,尾指针->next才为空4.看了老师“带你打代码”里面有序表合并的代码写法,让我更熟悉一些操作,譬如: 新建一个结点: (

关于顺序表示的线性表一些算法的实现

int compare(SqList l, Elemtype e)//用来比较的函数,现在选用== { int position=0;//表中没有元素e时,返回position=0 for (int i = 0; i < l.length; i++){ if (e == *(l.elem + i)){//找到e的位置,按照平常人的习惯,将i+1赋给position position = i + 1; break; } } return position; } bool visit(SqList

线性表以及线性表的各种操作

1.线性表的定义 若将线性表记为(a1,...,ai-1,ai,ai+1,...,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素.线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表.注:线性表只有一个前驱和后驱,而且线性表是最常用且最简单的一种数据结构. 2.线性表的顺序存储结构 线性表的顺序存储结构,指的是一段地址连续的存储单元依次存储线性表的数据元素. 线性表的顺序存储结构如图所示: 2.1地址计算方法

线性表,线性表和链表的区别

存储类别 顺序存储结构 单链表 存储分配方式 用一段连续的存储单元依次存储线性表的数据元素 采用链式存储结构,用一组任意的存储单元存放线性表的元素 时间性能 查找O(1).插入和删除O(n) 查找O(n).插入和删除O(1) 空间性能 需要预分配存储空间,分大了浪费,小了容易发生上溢 不需要分配存储空间,只要有就可以分配,元素个数不受限制 通过上面的对比,可以得出一些经验性的结论: 若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构.若需要频繁插入和删除时,宜采用单链表结构. 当

04 顺序存储的线性表 及线性表操作方法定义

线性表结构: 1 #include "function_for_SqList.h" 2 //方法 3 //线性表L初始化(参数用引用) 4 Status InitList(SqList &L){ //构造一个空的顺序表 5 L.elem = new ElemType[MAXSIZE]; //为顺序表分配空间 6 if(!L.elem){ 7 exit(OVERFLOW); //存储分配失败 8 } 9 L.length = 0; //空表长度为0 10 return OK; 1