当前位置: 首页 > web >正文

《C#数据结构与算法》—201线性表

线性表的实现方式

 顺序表

线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素,用这种方式存储的线性表叫顺序表。

特点:表中相邻的数据元素在内存中存储位置也相邻。

顺序表接口实现:

方法名参数返回值描述
GetLengthint返回线性表的当前元素个数(长度)。
Clearvoid清空线性表,重置内部元素计数为0,释放存储空间。
IsEmptybool判断线性表是否为空(元素个数为0),返回true;否则返回false
AddT itemvoid在表尾追加元素。若容量不足,自动扩容。
Insert

T item,

 int index

void在指定索引处插入元素。索引需满足 0 ≤ index ≤ count,否则抛出异常。
Deleteint indexT删除并返回指定索引的元素。索引需满足 0 ≤ index < count,否则抛出异常。
GetEleint indexT获取指定索引的元素。索引越界时抛出异常。
索引器int indexT通过索引访问元素(如 list[0])。索引越界时抛出异常。
LocateT valueint返回第一个value相等的元素索引,未找到返回-1

代码: IList.cs

internal interface IList<T>
{int GetLength();//求长度void Clear(); //清空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); //按值查找
}

顺序表的实现

代码的实现:SeqList.cs

1、定义字段:
private T[] data; //用来存储数据private int count ;//表示存了多少个数据
2、实现构造函数 :
(1)  实现构造函数
 public SeqList(int size)  //size:数组的最大容量{data = new T[size];   // 初始化数组count = 0;            // 元素个数初始为0} 
(2)  默认构造函数(委托调用)
public SeqList():this(10) //默认构造函数 容量是10
{}
3、添加基础方法
(1)  获取当前元素数量
public int GetLength()
{return count;
}
(2)  判断是否为空 
public bool IsEmpty()
{return count == 0;
}
(3)  清空列表 
public void Clear()
{count = 0;
}
4. 实现核心操作
(1) 添加元素(到末尾)
public void Add(T item)
{if(count == data.Length) //当前数组已经存满{Console.WriteLine("前顺序表已经存满,不允许再存入");}else{data[count] = item;count++;}
}
 (2)  插入元素(到指定位置)
public T GetEle(int index)
{if(index>=0&& index<=count-1){return data[index];}else{Console.WriteLine("索引不存在");return default(T);}
}
(3) 删除元素(按索引)
public T Delete(int index)
{T temp = data[index];for (int i = index + 1; i < count; i++){data[i - 1] = data[i];}count--;return temp;
}
5. 实现访问与查找
(1) 按索引获取元素
public T GetEle(int index)
{if(index>=0&& index<=count-1){return data[index];}else{Console.WriteLine("索引不存在");return default(T);}
}
(2) 索引器
public T this[int index]
{get { return GetEle(index); }
}
(3) 按值查找索引
public int Locate(T value)
{for (int i = 0; i < count; i++){if (data[i].Equals(value)){return i;}}return -1;
}

代码使用:Program.cs

namespace _001_List
{internal class Program{static void Main(string[] args){SeqList<string> seqList = new SeqList<string>();seqList.Add("123");seqList.Add("145");seqList.Add("167");Console.WriteLine("GetEle:"+seqList.GetEle(0));Console.WriteLine("this:"+seqList[0]);seqList.Insert("777", 1);for (int i = 0;i<seqList.GetLength(); i++){Console.Write(seqList[i]+ " ");}Console.WriteLine("seqList:");seqList.Delete(0);for (int i = 0; i < seqList.GetLength(); i++){Console.Write(seqList[i] + " ");}Console.WriteLine("seqList:");seqList.Clear();Console.WriteLine(seqList.GetLength()); Console.ReadKey();}}
}

输出结果:

http://www.xdnf.cn/news/3570.html

相关文章:

  • n8n 工作流画布上下左右移动的操作方法
  • AimRT从入门到精通 - 02执行器Executor
  • 【2025年五一数学建模竞赛】A题 完整论文 模型建立与求解
  • kubernetes中离线业务编排详解JobCronJob之Job 应用
  • 泰迪杯特等奖案例学习资料:基于时空图卷积网络的物流车辆路径动态优化系统
  • 创意效率双提升,AIGC让增长更轻盈
  • LeetCode算法题 (移除链表元素)Day15!!!C/C++
  • 基于STM32的带恒温系统智能外卖柜设计
  • Linux——进程终止/等待/替换
  • LWIP带freeRTOS系统移植笔记
  • Linux 常用命令 - tar【归档与压缩】
  • 初识日志技术
  • 当LLM遇上Agent:AI三大流派的“复仇者联盟”
  • NVIDIA Omniverse在数字孪生中的算力消耗模型构建方法
  • Python智能体开发
  • LeetCode[102]二叉树的层序遍历
  • 走进AI的奇妙世界:探索历史、革命与未来机遇
  • Mybatis中的一级二级缓存扫盲
  • 如何使用模块
  • [FPGA Video] AXI4-Stream Remapper
  • vue3+ts项目 配置vue-router
  • TS 安装
  • 仿腾讯会议——注册登录实现
  • AI算法可视化:如何用Matplotlib与Seaborn解释模型?
  • Bootstrap(自助法)​​:无需假设分布的统计推断工具
  • 「Mac畅玩AIGC与多模态13」开发篇09 - 基于多插件协同开发智能体应用(天气+名言查询助手)
  • DeepSeek实战--各版本对比
  • 【AI科技】AMD ROCm 6.4 新功能:突破性推理、即插即用容器和模块化部署,可在 AMD Instinct GPU 上实现可扩展 AI
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: [2]如何使用跨平台消息框?
  • 低代码/AI是否会取代前端开发?