[数据结构]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数据结构之顺序表
关于线性表的概念这里就不赘述了,可以自行百度和查阅资料,线性表按照存储(物理)结构分为顺序存储和链式存储,每种存储方式的不同决定了它的实现代码是不同的: 顺序存储的特点就是在内存中选一块连续的地址空间 ...
随机推荐
- luogu 3415 祭坛
题目大意: 在平面上,有 n 个水晶柱,每个水晶柱可以用一个点表示 如果 4 个水晶柱依次相连可以构成一个四边形,满足其两条对角线分别平行于 x 轴和 y 轴,并且对角线的交点位于四边形内部(不包括边 ...
- 洛谷 P1083 [ NOIP 2012 ] 借教室 —— 线段树 / 二分差分数组
题目:https://www.luogu.org/problemnew/show/P1083 当初不会线段树的时候做这道题...对差分什么不太熟练,一直没A,放在那儿不管... 现在去看,线段树就直接 ...
- Unity 代码改宏定义
两个函数 PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup); //所有宏定义 ; 分割 PlayerSettings.SetS ...
- 【XSY3209】RGB Sequence
题目 传送门 解法 用\(f_{i, j, k}\)表示有\(i\)个红石块, \(j\)个绿宝石块, \(k\)个钻石块 可以转移到\(f_{p+1, j, k}\). \(f_{i, p+1,k ...
- codevs3981动态最大子段和(线段树)
3981 动态最大子段和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 题目还是简单一点好... 有n个数,a ...
- P2068 统计和
P2068 统计和 这题真的非常水了 如果不会 右转[模板]树状数组 2 基本上是一模一样的 #include <bits/stdc++.h> #define lowbit(x) x&am ...
- 解决macOS升级之后每次使用ssh都要输入密码的问题
最近想趁着假期把跟了我2年mac的系统重做下.于是就开始行动了,经过大半天的数据备份.然后进行了全盘格式化,使用了在线更新的方式从新安装升级到了10.12.6.这里提醒下有类似的想法的同学可以采用 ...
- python自动化测试学习笔记-4内置函数,处理json
函数.全局变量 写代码时注意的几点事项: 1.一般写代码的时候尽量少用或不用全局变量,首先全局变量不安全,大家协作的情况下,代码公用容易被篡改,其次全局变量会一直占用系统内容. 2.函数里如果有多个r ...
- Dex文件方法数超过65536怎么破?
你的应用中的Dex 文件方法数超过了最大值65536的上限,会提示你: UNEXPECTED TOP-LEVEL EXCEPTION:java.lang.IllegalArgumentExceptio ...
- nginx下如何配置 ssl证书?腾讯云ssl证书为例!
nginx下如何配置 ssl证书?腾讯云ssl证书为例! 目前为止,https已经成为一种趋势,想要开启https就需要ssl证书. 首先,为域名注册ssl证书. 腾讯云注册地址:https://cl ...