线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系。 这种一对一的关系指的是数据元素之间的位置关系,即: (1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素; (2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素。也就是说,数据元素是一个接一个的排列。因此,可以把线性表想象为一种数据元素序列的数据结构。

线性表的接口如下所示。

public interface IListDS<T>//线性表的接口
    {
        int GetLength(); //求长度
        void Clear(); //清空操作
        bool IsEmpty(); //判断线性表是否为空
        bool IsFull();
        void Append(T item); //附加操作
        void Insert(T item, int i); //插入操作
        T Delete(int i); //删除操作
        T GetElem(int i); //取表元
        int Locate(T value); //按值查找
        void Reverse();//倒置
    }

  在计算机内,保存线性表最简单、最自然的方式,就是把表中的元素一个接一个地放进顺序的存储单元,这就是线性表的顺序存储(Sequence Storage)。线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素,用这种方式存储的线性表叫顺序表(Sequence List)。顺序表的特点是表中相邻的数据元素在内存中存储位置也邻。

 public class SeqList<T> : IListDS<T>
     {
         private int last;
         private int maxSize;
         private T[] data;

         public T this[int index]
         {
             get { return data[index]; }
             set { data[index] = value; }
         }
         public SeqList(int size)
         {
             maxSize = size;
             data = new T[size];
             last = -;
         }
         public int Last
         {
             get { return last; }
         }
         public int MaxSize
         {
             get { return maxSize; }
             set { maxSize = value; }
         }

         public int GetLength()
         {
             ;
         }

         public void Clear()
         {
             last = -;
         }

         public bool IsEmpty()
         {
             ;
         }
         public bool IsFull()
         {
             ;
         }
         public void Append(T item)
         {
             if (IsFull())
             {
                 Console.WriteLine("List is full");
                 return;
             }
             data[++last] = item;
         }

         public void Insert(T item, int i)
         {
             if (IsFull())
             {
                 Console.WriteLine("List is full");
                 return;
             }
              || i > last + )
             {
                 Console.WriteLine("Position is error!");
                 return;
             }
             )
             {
                 data[last + ] = item;
             }
             else
             {
                 ; j <= last; j++)
                 {
                     data[j + ] = data[j];
                 }
                 data[i - ] = item;
             }
             ++last;
         }

         public T Delete(int i)
         {
             T tmp = default(T);
             if (IsEmpty())
             {
                 Console.WriteLine("List is empty");
                 return tmp;
             }
              || i > last + )
             {
                 Console.WriteLine("Position is error!");
                 return tmp;
             }
             )
             {
                 tmp = data[last];
             }
             else
             {
                 tmp = data[i - ];
                 ; j++)
                 {
                     data[j] = data[j + ];
                 }
             }
             --last;
             return tmp;
         }

         public T GetElem(int i)
         {
              || i > last + )
             {
                 Console.WriteLine("List is empty or Position is error!");
                 return default(T);
             }
             ];
         }

         public int Locate(T value)
         {
             if (IsEmpty())
             {
                 Console.WriteLine("List is empty!");
                 ;
             }
             ;
             ; i <= last; i++)
             {
                 if (value.Equals(data[i]))
                     break;
             }
             if (i > last)
                 ;
             return i;
         }
         public void Reverse()
         {
             T tmp = default(T);
             int len = GetLength();
             ; i <= len / ; i++)
             {
                 tmp = data[i];
                 data[i] = data[len - i];
                 data[len - i] = tmp;
             }
         }
     }
 }

C#线性表之顺序表的更多相关文章

  1. c/c++ 线性表之顺序表

    线性表之顺序表 存储在连续的内存空间,和数组一样. 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit). 实现了以下功能: 函数 功能描述 ...

  2. [C++]线性链表之顺序表<一>

    顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]. 使用的基本数据结构:数组 ...

  3. [C++]线性链表之顺序表<二>

    /*   @content 线性链表之顺序表   @date 2017-3-21 1:06   @author Johnny Zen  */ /* 线性表     顺序表     链式表[带头指针/不 ...

  4. 线性表之顺序表C++实现

    线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件 #include<iostream> ; //定义顺序表SeqList的模板类 template<class ...

  5. [C++]数据结构:线性表之顺序表

    1 顺序表 ADT + Status InitList(SeqList &L) 初始化顺序表 + void printList(SeqList L) 遍历顺序表 + int ListLengt ...

  6. [数据结构 - 第3章] 线性表之顺序表(C++实现)

    一.类定义 顺序表类的定义如下: #ifndef SEQLIST_H #define SEQLIST_H typedef int ElemType; /* "ElemType类型根据实际情况 ...

  7. 数据结构Java实现02----线性表与顺序表

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. 数据结构Java实现01----线性表与顺序表

    一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...

  9. C# 数据结构 线性表(顺序表 链表 IList 数组)

    线性表 线性表是最简单.最基本.最常用的数据结构.数据元素 1 对 1的关系,这种关系是位置关系. 特点 (1)第一个元素和最后一个元素前后是没有数据元素,线性表中剩下的元素是近邻的,前后都有元素. ...

随机推荐

  1. php 全角半角转换

    <?phpheader("Content-type: text/html; charset=utf-8");// 第一个参数:传入要转换的字符串// 第二个参数:取0,半角转 ...

  2. Linux phpbb论坛的安装(中文版)

    1:建立文件夹

  3. 。【自学总结 1】------3ds Max 界面

    3ds Max 界面包含4部分(7区域) 4部分:菜单.控制工具.命令面板.窗口区 7区域: 1.标题栏:主要用于显示当前工作文件的名称,可以看到文件存储路径. 2.菜单栏:菜单中的命令如果带有省略号 ...

  4. 【Unity3D游戏开发】之全局管理类的几种方式 (十六)

    如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合存储一些全局的变量,如游戏当前关卡.玩家得分等 ...

  5. CSS3之尖角标签

    如图所示,Tag标签的制作通常使用背景图片,现在用CSS3代码就能实现尖角效果(需浏览器支持CSS3属性). 运用CSS3样式实现尖角标签,只需要写简单的HTML结构和CSS样式. <p> ...

  6. 探究chrome下的开发工具的各功能

    F12 一.网页寻找js事件的位置,或者某一个次究竟在哪个相关的文件中可以全局搜索: ①控制台右上角的:(Customize and control DevTools)三个点点开,---->Se ...

  7. 插件框架(Plugin Framework)

    HOW TO MAKE PLUGIN FRAMEWORK 插件系统构建 Dissect Eclipse Plugin Framework

  8. oracle sql 优化

    2. 选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先 ...

  9. linux笔记:shell基础-环境变量配置文件

    source命令(重新读入配置文件,不用重启就直接生效): 环境变量配置文件: linux中的环境变量配置文件(~代表当前用户的家目录): 配置文件读取顺序: /etc/profile 文件的作用:

  10. hdu ----3695 Computer Virus on Planet Pandora (ac自动机)

    Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 256000/1280 ...