C#数据结构:顺序表结构

  • 1、自定义顺序表结构
using System.Collections;
using System.Collections.Generic; /// <summary>
///线性表接口
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IListDS<T>
{
int MaxSize(); bool IsEmpty();
bool IsFull(); void Add(T item);
void Insert(T item, int index);
T Delete(int index); int GetLength(); T this[int index] { get; }
T GetElem(int index);
int Locate(T value); void Clear(); } /// <summary>
/// 顺序表
/// </summary>
/// <typeparam name="T"></typeparam>
public class SqeList<T> : IListDS<T>
{
private T[] data;
private int last = -1; //表的最后索引,表空是last=-1 //初始化顺序表
public SqeList(int size)//size最大容量
{
data = new T[size];
last = -1;
} public SqeList() : this(10)//默认构造函数,容量10
{ } //表最大容量
public int MaxSize()
{
return data.Length;
} //判空
public bool IsEmpty()
{
return last == -1;
} //判满
public bool IsFull()
{
return last == data.Length - 1;
} //添加操作
public void Add(T item)
{
if (IsFull())
{
Debug.LogError("当前顺序表已存满!");
return;
}
data[last + 1] = item;
last++;
} //插入操作
public void Insert(T item, int index)
{
if (index < 0 || index > last+1) //合法的插入 0<=index<=last+1
{
Debug.LogError("插入index不合法!");
return;
}
if (IsFull())
{
Debug.LogError("当前顺序表已存满!");
return;
} for (int i = last; i >= index; i--)
{
data[i + 1] = data[i];//将后面的元素向后移动
}
data[index] = item;
last++;
} //根据index删除表元素
public T Delete(int index)
{
if (index < 0 || index > last)
{
Debug.LogError("删除位置index不合法!");
return default(T);
}
T temp = data[index];
for (int i = index + 1; i <= last; i++)
{
data[i - 1] = data[i];//将后面的元素向后移
}
last--;
return temp;
} //表长
public int GetLength()
{
return last + 1;
} //根据索引获得表元素
public T GetElem(int index)
{
if (index >= 0 && index <= last)
{
return data[index];
}
else
{
Debug.LogError("索引不合法!");
return default(T);
}
} public T this[int index]//索引器访问表元素值
{
get { return GetElem(index); }
} //获取元素索引值
public int Locate(T value)
{
for (int i = 0; i <= last; i++)
{
if (data[i].Equals(value))
{
return i;
}
}
return -1;
} //清空顺序表
public void Clear()
{
last = -1;
} //显示所有的表元素值
public void Display()
{
if (IsEmpty())
{
Debug.Log("表中没有元素");
return;
}
Debug.Log("表中的值:");
for (int i = 0; i <= last; i++)
{
Debug.Log("index:"+i.ToString()+" value:"+data[i]);
}
}
}

顺序表:测试用例
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class _001LineTable : MonoBehaviour
{ //初始化顺序表
SqeList<string> sqeList = new SqeList<string>(20); void Start()
{
Debug.Log("顺序表的最大容量:" + sqeList.MaxSize()); //判空操作
Debug.Log("顺序表是否为空:" + sqeList.IsEmpty()); //判满操作
Debug.Log("顺序表是否已满:" + sqeList.IsFull()); //添加操作
Debug.Log("添加操作--------------添加'123','456','789'");
sqeList.Add("123");
sqeList.Add("456");
sqeList.Add("789");
sqeList.Display(); Debug.Log("顺序表是否为空:" + sqeList.IsEmpty()); //插入操作
Debug.Log("插入操作---------------在index=2处插入字符串:'111'");
sqeList.Insert("111", 2);
sqeList.Display(); //删除操作
sqeList.Delete(2);
Debug.Log("删除操作---------------删除index=2的元素");
sqeList.Display(); //表长
Debug.Log("表长-------------------顺序表表长:" + sqeList.GetLength()); //查找
Debug.Log("查找--------------index查value");
Debug.Log("index=0的值:" + sqeList[0]);
Debug.Log("index=2的值:" + sqeList.GetElem(2));
Debug.Log("查找--------------value查index");
Debug.Log("'789’的index值:" + sqeList.Locate("789")); //清空
Debug.Log("清空表");
sqeList.Clear();
sqeList.Display(); }

输出结果:


注意

1.顺序表的基本操作:初始化表,判空,判满,添加,插入,删除,查找,表长,清空。

2.此处的清空表,只是将last置为-1,来表示为表空,而data中依然有原来的数据,表也没有被销毁。再次的赋值该表,只是将之前的数据覆盖掉。

3.last表示该表的最后元素的索引,last = -1:表示表为空表。

4.插入操作时,插在尾端时,不用移动元素。

【C#】【数据结构】001-线性表:顺序表的更多相关文章

  1. 【数据结构】线性表&&顺序表详解和代码实例

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 预备知识 1.0 什么是线性表? 线性表(List)是零个或者多个数据元素的有限序列. 首先它是一个序列.里面的元素是有顺 ...

  2. 《数据结构》2.2顺序表(sequence list)

    //顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...

  3. C语言 线性表 顺序表结构 实现

    一个能够自动扩容的顺序表 ArrList (GCC编译). #include <stdio.h> #include <stdlib.h> #include <string ...

  4. C:数据结构与算法之顺序表

    顺序表作为数据结构的开端,说明这里面很多基础要学,初学者一开始都会混淆,今天我们来一步一步来建立一个完整的顺序表,可以任我们控制的顺序表,首先先定义一个顺序表 /* Note:Your choice ...

  5. JAVA实现具有迭代器的线性表(顺序表)

    1,先了解下JAVA类库中的迭代器:JAVA提供了两种基本类型的迭代器,分别用两个接口来表示:Iterator<T>,ListIterator<T>.其中,Iterator&l ...

  6. python基础下的数据结构与算法之顺序表

    一.什么是顺序表: 线性表的两种基本的实现模型: 1.将表中元素顺序地存放在一大块连续的存储区里,这样实现的表称为顺序表(或连续表).在这种实现中,元素间的顺序关系由它们的存储顺序自然表示. 2.将表 ...

  7. 线性表——顺序表的实现与讲解(C++描述)

    线性表 引言 新生安排体检,为了 便管理与统一数据,学校特地规定了排队的方式,即按照学号排队,谁在前谁在后,这都是规定好的,所以谁在谁不在,都是非常方便统计的,同学们就像被一条线(学号)联系起来了,这 ...

  8. 数据结构C++实现代码-顺序表

    参考:https://blog.csdn.net/ebowtang/article/details/43094041 //seqList.h// //包含顺序表中的声明// #include<i ...

  9. 数据结构与算法之顺序表C语言实现

    顺序表等相关概念请自行查阅资料,这里主要是实现. 注: 1.顺序表C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简单函数,可自行添加功能: 4.可用C+ ...

  10. 【数据结构 Python & C++】顺序表

    用C++ 和 Python实现顺序表的简单操作 C++代码 // Date:2019.7.31 // Author:Yushow Jue #include<iostream> using ...

随机推荐

  1. Jquery | 基础 | 慕课网 | 层级选择器

    选择器中的层级选择器处理关系类型: 子元素 后代元素 兄弟元素 相邻元素 <!DOCTYPE html> <html> <head> <meta http-e ...

  2. 递推DP URAL 1244 Gentlemen

    题目传送门 /* 题意:给出少了若干卡片后的总和,和原来所有卡片,问少了哪几张 DP:转化为少了的总和是否能有若干张卡片相加得到,dp[j+a[i]] += dp[j]; 记录一次路径,当第一次更新的 ...

  3. DP+埃氏筛法 Codeforces Round #304 (Div. 2) D. Soldier and Number Game

    题目传送门 /* 题意:b+1,b+2,...,a 所有数的素数个数和 DP+埃氏筛法:dp[i] 记录i的素数个数和,若i是素数,则为1:否则它可以从一个数乘以素数递推过来 最后改为i之前所有素数个 ...

  4. MyEclipse常用快捷键及快捷键大全

    MyEclipse常用快捷键:alt+/     代码提示ctrl+shift+F   代码排版ctrl + /     注释当前行 ctrl+D      删除当前行 Alt+C       拷贝当 ...

  5. 504 Base 7 七进制数

    给定一个整数,将其转化为7进制,并以字符串形式输出.示例 1:输入: 100输出: "202" 示例 2:输入: -7输出: "-10"注意: 输入范围是 [- ...

  6. 在linux中使用多个redis端口来构建redis集群

    大家好,这是我制作的redis集群搭建视频教程. 服务器:ubnutu server(版本18.10) redis:redis-4.0.12 我这里就简单说明下大概步骤了,详细请观看教学视频. 首先更 ...

  7. Win10 隐藏盘符

    1.隐藏盘符 打开磁盘管理 -> 对要隐藏的盘符单击右键 -> 更改驱动器号和路径 -> 删除. 打开资源管理,已经看不到该盘符,该盘符已被隐藏.只是隐藏,该盘符上的数据仍然还在. ...

  8. sys模块详解

    1.sys.argv argv是「argument variable」参数变量的简写形式,一般在命令行调用的时候由系统传递给程序.这个变量其实是一个List,argv[0] 一般是“被调用的脚本文件名 ...

  9. [ SNOI 2013 ] Quare

    Description 题目链接 求一张无向带权图的边双连通生成子图的最小代价. Solution 核心的思路是,一个点双连通分量肯定是一堆环的并. 考虑增量地构造这个边双连通图,每次把一个环并进去, ...

  10. gp服务输出的结果文件输出到绝对路径

    gp服务跟本地用arcmap执行gp有个不同,就是输出的文件一般只能输出到arcgis server默认的output目录里面(arcgis server有此限制,无论怎么配还是写到output目录里 ...