C#基于数组实现泛型顺序表

前方预警,不敢保证代码质量。

错误代码示例:

 1         /// <summary>
 2         /// 查找顺序表第i个位置的元素
 3         /// 在显示情况中,我们更常用下标
 4         /// </summary>
 5         /// <param name="i"></param>
 6         /// <returns></returns>
 7         public T GetElemByIndex(int i)
 8         {
 9             //T temp = ;
10             if (data.Length == 0)
11             {
12                 //throw new IndexOutOfRangeException("索引超出顺序表范围");
13                 throw new NullReferenceException("顺序表为空");
14             }
15             else if (i < 1 || i > Length + 1)
16             {
17                 throw new IndexOutOfRangeException("索引超出顺序表范围");
18             }
19             else
20             {
21                 return data[i-1];
22             }
23         }

查找制定位置的元素

注意在代码中,返回值没有按照数据结构课本的方式,返回Status,因为用户调用方法,就是要获取返回值的,用ref的方式反而不好使用,感觉怪怪的。

另外,在非法调用时,也不是通过cw的方式提醒用户出错,而是采用直接抛出异常的方式,数组是否越界这些判断理应放权给用户。

还有,从代表中,我们发现,不返回值,而是抛出异常,编译任然会通过。

正确代码示例:

if (Length == 0)
{
      throw new NullReferenceException("顺序表为空");
}

判断顺序表是否为空时,不能用data.Length属性,因为该属性值不是顺序表的大小,而是数组的大小,永远为MaxSize;而Length表示线性表的长度;

时间: 2024-11-05 02:17:33

C#基于数组实现泛型顺序表的相关文章

【数据结构】之顺序表和链表的比较

1.顺序表 顺序表的优点: (1) 方法简单,各种高级语言中都有数组,容易实现.(2) 不用为表示结点间的逻辑关系而增加额外的存储开销.(3) 顺序表具有按元素序号随机访问的特点. 顺序表的缺点: (1) 在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺序表效率低.(2) 需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置:预先分配过小,又会造成溢出. 2.链表 链表的优点: (1) 在链表中做插入删除操作时,不会影响前面和后面的节点,因此对n较大的链表

java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制)

转载请注明出处(请尊重原创!谢谢~): http://blog.csdn.net/javazejian/article/details/53073995 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) ??这篇是数据结构与算法的第3篇,通过前两篇的介绍,对应顺序表和链表已有

Java数据结构-线性表之顺序表ArrayList

线性表的顺序存储结构,也称为顺序表,指用一段连续的存储单元依次存储线性表中的数据元素. 根据顺序表的特性,我们用数组来实现顺序表,下面是我通过数组实现的Java版本的顺序表. package com.phn.datestructure; /** * @author 潘海南 * @Email [email protected] * @TODO 顺序表 * @date 2015年7月16日 */ public class FOArrayList<E> { // 顺序表长度 private int

数据结构(C实现)------- 顺序表

线性表是由n(n>=0)个具有相同数据类型的数据元素组成的有限序列,通常记为:(a1,a2,..,ai-1,ai,ai+1,...,an),表中相邻元素之间存在着序偶关系,即<ai-1,ai>,其中ai-1称为ai的前驱,ai称为ai-1的后继,2<=i<=n.表中数据元素的个数n,称为线性表的长度,长度为0的线性表称为空表.在非空的线性表中,每个数据元素都有一个确定的位置,如a1是第一个元素,an是最后一个元素,ai是第i个元素,称i 为数据元素ai在线性表上的位序. 顺序

数据结构-02 _用顺序表解决线性表的编程问题

看到这个标题,相必最先应该只到什么是顺序表,什么是线性表. 线性表(linear list):由n(n>=0)个相同的数据类型的数据元素(结点)a0,a1,a2,...an-1 组成的有限序列. 顺序表:把线性表的结构按照逻辑顺序存放在一组地址连续的存储单元里,用这种方式存储的线性表简称顺序表. 线性表的基本操作: 1.初始化操作 2.插入操作:InsertNode(T a,int i) 在线性表的第i个位置插入一个值为a的新元素,使得原序号为i,i+1,...,n 的数据元素的序号变成i+1,

数据结构C#版笔记--顺序表(SeqList)

线性结构(Linear Stucture)是数据结构(Data Structure)中最基本的结构,其特征用图形表示如下: 即:每个元素前面有且只有一个元素(称为"前驱"),同样后面有且只有一个元素(称为"后继")--注:起始元素的前驱认为是空,末尾元素的后继认为也是空,这样在概念上就不冲突了. 线性表(List)是线性结构的一种典型实现,它又可以分为:顺序表(SeqList)和链表(LinkList)二大类. 顺序表(SeqList)的基本特征为:元素在内部存储时

基于数组实现Java 自定义Queue队列及应用

Java 自定义队列Queue: 队列的抽象数据类型就是一个容器,其中的对象排成一个序列,我们只能访问和取出排在最前端( Front)的对象,只能在队列的尾部( Rear)插入新对象.正是按照这一规则,才能保证最先被插入的对象首先被删除( FIFO).java本身是有自带Queue类包,为了达到学习目的已经更好深入了解Queue队列,自己动手自建java Queue类是个很好的学习开始: 基于数组的实现 ? 顺序数组 借助一个定长数组 Q 来存放对象,即可简单地实现队列.那么,为了符合 FIFO

顺序表程序实现

由于线性表中每个数据元素的类型相同,可以用C或C++语言中的一维数组来实现顺序表. #include<iostream>using namespace std;#define LIST_INIT_SIZE 50class SqList{int *elem;//存′?储′¢空?间?基ù址·int length;//当μ±前°长3¤度èint listsize;//当μ±前°分·?配?的μ?存′?储′¢容èY量á?public:    SqList(int leng);    int Locate

数据结构(一)线性表——顺序表

一.顺序表基本操作的实现 通常把顺序存储结构实现的线性表称为顺序表. 1.状态类型Status的定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef char ElemType; 2.顺序表类型SqList的定义 #define ListSpaceIncr 20 typedef stru