线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(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. java list倒序输出及复制list集合

    如原来有一个集合list,list里面是有数据的,现在如果把list中的集合倒序过来,加这代码 Collections.reverse(list);此代码中传入原来的list数据 有这代码后list在 ...

  2. python基础(内置函数+文件操作+lambda)

    一.内置函数 注:查看详细猛击这里 常用内置函数代码说明: # abs绝对值 # i = abs(-123) # print(i) #返回123,绝对值 # #all,循环参数,如果每个元素为真,那么 ...

  3. iptables交互配置shell脚本

    #!/bin/bash while true do clear echo "———————-menu————————" echo -e "\033[49;32;1m(1) ...

  4. python matplotlib 中文显示参数设置

    python matplotlib 中文显示参数设置 方法一:每次编写代码时进行参数设置 #coding:utf-8import matplotlib.pyplot as pltplt.rcParam ...

  5. WPF上Arc Lisence的有关问题

    WPF下Arc Lisence的问题代码如下: using System; using System.Collections.Generic; using System.Configuration; ...

  6. sql_树形查询

    with Subqry(FID,A_TypeName,A_ParentID) as (select FID,A_TypeName,A_ParentID from tb_Appliances where ...

  7. socket(一)

    相关链接: http://my.oschina.net/u/1378445/blog/340206?p=2&temp=1469158886336#blog-comments-list http ...

  8. C library function - rewind()

    Description The C library function void rewind(FILE *stream) sets the file position to the beginning ...

  9. Redis哈希表的实现要点

    Redis哈希表的实现要点 哈希算法的选择 针对不同的key使用不同的hash算法,如对整型.字符串以及大小写敏感的字符串分别使用不同的hash算法: 整型的Hash算法使用的是Thomas Wang ...

  10. mysql命令导出导入数据和结构

    在命令行下mysql的数据导出有个很好用命令mysqldump,它的参数有一大把,可以这样查看: mysqldump 最常用的: mysqldump -uroot -pmysql databasefo ...