[数据结构]C#顺序表的实现
在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了
但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
首先是创建一个顺序表的接口实现里面的方法:插入,删除,查找等等。
public interface IListDs<T> {
void Clear();//清空
int GetLength();//获得长度
bool IsEmpty();//是否为空
void Add(T item);//添加功能
void Insert(T item, int index);//插入功能
T Delete(int index);//删除功能
T GetEle(int index);//获得操作对象提供给索引器
T this[int index] { get; }//索引器
int Locate(T value);//当前位置
}
接着创建一个类实现接口
class SeqList<T> : IListDs<T>//实现接口方法
{
/// <summary>
/// 顺序表实现方式
/// </summary>
/// <param name="index"></param>
/// <returns></returns> private T[] data;//获得一个数组 private int count = ; public SeqList(int size)//size就是最大容量(构造函数)
{
data = new T[size];//获得T类型的数组长度
count = ;
}
public SeqList() : this() { }//调用这个构造方法,传入一个整型参数值为10. public T this[int index]
{
get
{
return GetEle(index);//获得当前索引器的长度
}
} public void Add(T item)
{
if (count.Equals(data.Length))//判断当前的数据长度是多少,如果给定的数值的大于构造函数的值则返回错误
{
Console.WriteLine("当前顺序表已充满,不允许再存");
}
else
{//如果调用该方法,则item的值会赋予data但是必须要有下标存放,所以为data[count],count+=1是为了不让数据被覆盖,而是能够一直添加数据
data[count] = item;
count += ;
}
} public void Clear()
{
count = ;//清空顺序表的元素
} public T Delete(int index)
{
T temp = data[index];//
for (int i = index+; i <count; i++)
{
data[i - ] = data[i];//把数据向前移动
}
count--;
return temp;
} public T GetEle(int index)
{
//传进的参数为当前类的可迭代对象的下标
if (index >= && index <= count - )
{
return data[index];
}
else
{
Console.WriteLine("索引不存在!");
return default(T);
}
}
/// <summary>
/// 取得数据的个数
/// </summary>
/// <returns></returns>
public int GetLength()
{
return count;
} public void Insert(T item, int index)
{
for (int i = count; i >= index; i--)//从后向前插入,不然会地址改变后替换掉后一元素值
{
data[i + ] = data[i];
}
data[index] = item;
count++;
} public bool IsEmpty()
{
throw new NotImplementedException();
} public int Locate(T value)//
{
for (int i = ; i < count; i++)
{
if (data[i].Equals(value))
{
return i;
}
}
return -;
}
}
最后在控制台程序Program中调用
class Program
{
static void Main(string[] args)
{ //C#数据结构的操作实例
SeqList<string> seqList = new SeqList<string>();
//插入操作
seqList.Add("");
seqList.Add("");
seqList.Add("");
//获得索引对象
Console.WriteLine(seqList.GetEle());
Console.WriteLine(seqList[]);
seqList.Insert("", );
for (int i = ; i < seqList.GetLength(); i++)
{
Console.WriteLine(seqList[i] + " ");
}
Console.WriteLine();
seqList.Delete();
for (int i = ; i < seqList.GetLength(); i++)
{
Console.WriteLine(seqList[i] + " ");
}
Console.WriteLine();
Console.WriteLine(seqList.Locate(""));
seqList.Clear();
Console.WriteLine(seqList.GetLength());
Console.Read();
}
}
上述操作实现了顺序表在C#中的操作,用到了索引器和构造函数赋值
对于新手学习C#和数据结构是非常有帮助的。希望大家支持
[数据结构]C#顺序表的实现的更多相关文章
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
基础数据结构——顺序表(2) Time Limit: 1000 MS Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...
- [Python] 数据结构--实现顺序表、链表、栈和队列
说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...
- 【PHP数据结构】顺序表(数组)的相关逻辑操作
在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...
- 数据结构:顺序表(python版)
顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...
- 数据结构之顺序表,c#实现
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- 数据结构4:顺序表(线性表的顺序存储结构)及C语言实现
逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构. 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间 ...
- Java——数据结构(顺序表)
这是一个顺序表的类,初始化的时候就已经确定了表的长度,之后不能添加数据,因为使用的是数组存储的数据,不过这个表的类型是泛型的. public class List { private Object[] ...
- javascript数据结构之顺序表
关于线性表的概念这里就不赘述了,可以自行百度和查阅资料,线性表按照存储(物理)结构分为顺序存储和链式存储,每种存储方式的不同决定了它的实现代码是不同的: 顺序存储的特点就是在内存中选一块连续的地址空间 ...
随机推荐
- luogu3379 【模板】最近公共祖先(LCA) Tarjan
LCA的Tarjan算法是一个离线算法,复杂度$O(n+q)$. 我们知道Dfs搜索树时会形成一个搜索栈.搜索栈顶节点cur时,对于另外一个节点v,它们的LCA便是v到根节点的路径与搜索栈开始分叉的那 ...
- SuperSocket中的Server是如何初Start的
第一个函数 d:\sourcecode\github\supersocket\quickstart\basic\telnetserver_startbyconfig\program.cs static ...
- bzoj1607 [Usaco2008 Dec]Patting Heads 轻拍牛头——暴力
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1607 观察一下数据范围,就是纯粹的暴力. 代码如下: #include<iostrea ...
- Java 日期时间 Date类型,long类型,String类型表现形式的转换 (转)
Java 日期时间 Date类型,long类型,String类型表现形式的转换 1.java.util.Date类型转换成long类型java.util.Date dt = new Date();Sy ...
- [Swift通天遁地]八、媒体与动画-(12)CoreText框架中的字体的FontMetrics布局信息
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Unity项目 - 打砖块游戏
基本功能:实现WASD进行视角在XY轴方向的移动,其次按下鼠标左键产生子弹bullet对面前的砖块cube进行碰撞. 主界面: 运行情况: 动态过程: 项目地址:BreakBricks 制作过程: 创 ...
- Linux添加用户组和删除用户组
1.添加用户组使用groupadd命令添加用户组:groupadd group_name此操作需由系统管理员进行.2.删除用户组使用groupdel命令删除用户组:groupdel group_nam ...
- java中使用String的replace方法替换html模板保存文件
在我们的D盘下有这样一个html模板,现在我们要做的就是解析news.template文件,从数据库中提取数据将数据添加到指定的模板位置上 <head> <title>{tit ...
- Android 6.0一个完整的native service
上一篇博客<Android 6.0 如何添加完整的系统服务(app-framework-kernel)>http://www.cnblogs.com/hackfun/p/7418902. ...
- Python3之Zip
from collections import defaultdict from collections import OrderedDict d = defaultdict(list) d['a'] ...