在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了

但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。
采用顺序存储结构的线性表简称为“ 顺序表”。顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L  1≤i≤n 其中,L是元素占用存储单元的长度。
下面是我们的代码!

首先是创建一个顺序表的接口实现里面的方法:插入,删除,查找等等。

    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#顺序表的实现的更多相关文章

  1. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

  2. [Python] 数据结构--实现顺序表、链表、栈和队列

    说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

  3. C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

  4. 【PHP数据结构】顺序表(数组)的相关逻辑操作

    在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...

  5. 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...

  6. 数据结构之顺序表,c#实现

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  7. 数据结构4:顺序表(线性表的顺序存储结构)及C语言实现

    逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构. 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间 ...

  8. Java——数据结构(顺序表)

    这是一个顺序表的类,初始化的时候就已经确定了表的长度,之后不能添加数据,因为使用的是数组存储的数据,不过这个表的类型是泛型的. public class List { private Object[] ...

  9. javascript数据结构之顺序表

    关于线性表的概念这里就不赘述了,可以自行百度和查阅资料,线性表按照存储(物理)结构分为顺序存储和链式存储,每种存储方式的不同决定了它的实现代码是不同的: 顺序存储的特点就是在内存中选一块连续的地址空间 ...

随机推荐

  1. cogs750栅格网络流(最小割)

    750. 栅格网络流 ★★☆   输入文件:flowa.in   输出文件:flowa.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太 ...

  2. Java 编译与反编译

    编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级语言(Low-level Lang ...

  3. Java初学者如何排查学习中遇到的问题

    大多数新手或者刚入门的人在学习的时候,不管是看视频还是看书,都会遇到各种各样的问题,比如JDK配置了,但是javac没有办法执行,Eclipse安装了,但是打不开,快捷键用不了,照着视频敲了但是和视频 ...

  4. ZOJ1969-Hard to Believe, but True!

    import re while True: x = raw_input() if(x == '0+0=0'): print 'True' break a,b,c = re.split('[+=]', ...

  5. 【洛谷4396/BZOJ3236】[AHOI2013]作业(莫队+分块/树状数组/线段树)

    题目: 洛谷4396 BZOJ3236(权限) 这题似乎BZOJ上数据强一些? 分析: 这题真的是--一言难尽 发现题面里没说权值的范围,怕出锅就写了离散化.后来经过面向数据编程(以及膜神犇代码)知道 ...

  6. 【洛谷2839/BZOJ2653】middle(主席树)

    题目: 洛谷2839 分析: 记\(s_i\)表示原序列中第\(i\)大的数. 考虑对于任意一个区间\([a,b]\),设它的中位数为\(s_m\),那么这个区间内大于等于\(s_m\)的数和小于\( ...

  7. 浅谈Java中的hashcode方法以及equals方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个 ...

  8. Android热修复方案比较

    热修复的特点:无需重新发版,实时高效热修复:用户无感知修复,无需下载新的应用,代价小: 修复成功率高,把损失降到最低. 一.热修复开源方案和使用情况 方案名称 方案开发公司 开发时间 Github星评 ...

  9. 关于debug.keystore文件用法以及错误处理

    在开发过程中需要频繁的为测试的同事签名apk,非常很麻烦,把默认debug.keystore文件替换成发布用(生产环境)的签名文件,不用频繁地签名apk文件了.      如果直接使用生产keysto ...

  10. PHP开发之旅-表单验证

    一.创建表单 <form name = "login" method = "post" action="contact.php?action=l ...