[数据结构]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数据结构之顺序表
关于线性表的概念这里就不赘述了,可以自行百度和查阅资料,线性表按照存储(物理)结构分为顺序存储和链式存储,每种存储方式的不同决定了它的实现代码是不同的: 顺序存储的特点就是在内存中选一块连续的地址空间 ...
随机推荐
- Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图
Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图 OSM(OpenStreetMap-开放街道地图)服务就是一种发布自己地图数据图片为服务的一种实现类型,开放街道 ...
- nodejs Yarn替代npm的包管理——快速、安全、可靠性高的依赖管理
Yarn能帮你解决的五件事 转自: http://www.qingpingshan.com/jb/javascript/185590.html 长话短说(TL;DR):在 JavaScript 领域有 ...
- 【POJ 1958】 Strange Towers of Hanoi
[题目链接] http://poj.org/problem?id=1958 [算法] 先考虑三个塔的情况,g[i]表示在三塔情况下的移动步数,则g[i] = g[i-1] * 2 + 1 再考虑四个塔 ...
- 回顾2017Java 小结
一.Java语言最流行 最近,调查结果已公布:Java 被评为最流行的语言,JavaScript 是最常用的语言,而 Go 被认为是最有前途的语言,Python 是最多人想去尝试的语言. https: ...
- github 用户不被识别问题
期末考完,继续开发. 用过的都知道,直接用的话贡献者上面显示不出自己. 查一下就知道是因为github的识别是靠邮箱设置的. 但是如果频繁创建新仓库,容易忘记设定用户名和邮箱. 突发奇想,发现 ...
- php安全过滤类
/*ansic码-Url码表: http://www.w3school.com.cn/tags/html_ref_urlencode.html ---------------------------- ...
- phpexecl 的基本操作
基本使用方法分三部分:一.引入接口 // PHPExcel_IOFactory require_once dirname(__FILE__).'/Classes/PHPExcel/IOFactory. ...
- codevs3162抄书问题(划分型dp)
3162 抄书问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 现在要把M本有顺序的书分给K个人复制(抄写),每 ...
- POJ 1873 计算几何
思路: 二进制枚举一下要删哪些点 求个凸包,算一下贡献 //By SiriusRen #include <cmath> #include <cstdio> #include & ...
- [转]Android ListView的Item高亮显示的办法
本文转自:http://www.cnblogs.com/dyllove98/archive/2013/07/31/3228601.html 在我们使用ListView的时候,经常会遇到某一项(Item ...