数据结构 --- 线性表(顺序存储结构)

工程目录结构:

Common.cs:

1 namespace DataStructure.Common
2 {
3     public class CommonClass
4     {
5         public const int DS_ListMaxSize = 20;  //线性表的最大容量
6     }
7 }

DS_List.cs:

  1 using System;
  2 using DataStructure.Common;
  3 using ElemType = System.Int32;     // ElemType 用来指代数据结构中元素的数据类型,这样写便于更改
  4
  5 namespace DataStructure.List
  6 {
  7
  8     /// <summary>
  9     /// 自定义顺序存储结构线性表
 10     /// </summary>
 11     public class SqList
 12     {
 13         //需要注意的是:数组的索引是从0开始的,但是操作的位置是从1开始的
 14
 15         public ElemType[] array = new ElemType[CommonClass.DS_ListMaxSize];    //数组,存储线性表中的数据元素
 16         public int length;                                                     //线性表长度
 17
 18         /// <summary>
 19         /// 获取元素
 20         /// </summary>
 21         /// <param name="L"></param>
 22         /// <param name="i">获取位置(1 开始)</param>
 23         /// <param name="e">获取元素的值</param>
 24         /// <returns></returns>
 25         public bool GetElem(SqList L, int i, ref ElemType e)
 26         {
 27             if (L.length <= 0 || i < 1 || i > L.length)
 28                 return false;
 29             e = L.array[i - 1];
 30             return true;
 31         }
 32
 33         /// <summary>
 34         /// 插入元素
 35         /// </summary>
 36         /// <param name="L"></param>
 37         /// <param name="i">插入位置(1 开始)</param>
 38         /// <param name="e">要插入的元素的值</param>
 39         /// <returns></returns>
 40         public bool ListInsert(SqList L, int i, ElemType e)
 41         {
 42             if (L.length == CommonClass.DS_ListMaxSize)
 43             {
 44                 Console.WriteLine("线性表已满");
 45                 return false;
 46             }
 47
 48             if (i < 0 || i > L.length + 1)
 49             {
 50                 Console.WriteLine("插入位置不合理");
 51                 return false;
 52             }
 53
 54             if (i <= L.length)
 55             {
 56                 for (int k = L.length - 1; k >= i - 1; --k)
 57                     L.array[k + 1] = L.array[k];
 58             }
 59
 60             L.array[i - 1] = e;
 61             ++L.length;
 62
 63             return true;
 64         }
 65
 66         /// <summary>
 67         /// 删除元素
 68         /// </summary>
 69         /// <param name="L"></param>
 70         /// <param name="i">删除位置(1 开始)</param>
 71         /// <param name="e">要删除的元素的值</param>
 72         /// <returns></returns>
 73         public bool DeleteElem(SqList L, int i, ref ElemType e)
 74         {
 75             if (L.length <= 0)
 76             {
 77                 Console.WriteLine("线性表为空");
 78                 return false;
 79             }
 80
 81             if (i < 1 || i > L.length)
 82             {
 83                 Console.WriteLine("删除位置不合理");
 84                 return false;
 85             }
 86
 87             e = L.array[i - 1];
 88
 89             for (int k = i, kMax = L.length; k < kMax; ++k)
 90             {
 91                 L.array[k - 1] = L.array[k];
 92             }
 93
 94             --L.length;
 95
 96             return true;
 97         }
 98     }
 99
100     /// <summary>
101     /// 用来测试自定义的顺序线性表
102     /// </summary>
103     public class TestSqList
104     {
105         public void Show()
106         {
107             SqList sqList = new SqList();
108
109             //插入元素
110             for (int i = 1; i <= 10; i++)
111             {
112                 sqList.ListInsert(sqList, i, i * 2);
113             }
114
115             //打印元素
116             for (int i = 1, iMax = sqList.length; i <= iMax; ++i)
117             {
118                 int value = -1;
119                 if (sqList.GetElem(sqList, i, ref value))
120                 {
121                     Console.WriteLine(value);
122                 }
123             }
124
125             int temp = -1;
126             if (sqList.DeleteElem(sqList, 2, ref temp))
127             {
128                 Console.WriteLine("删除的元素是 : " + temp);
129             }
130
131             //打印元素
132             for (int i = 1, iMax = sqList.length; i <= iMax; ++i)
133             {
134                 int value = -1;
135                 if (sqList.GetElem(sqList, i, ref value))
136                 {
137                     Console.WriteLine(value);
138                 }
139             }
140
141         }
142     }
143 }

progam.cs:

 1 using System;
 2 using DataStructure.List;
 3
 4 namespace DataStructure
 5 {
 6     class Program
 7     {
 8         static void Main(string[] args)
 9         {
10             #region 测试顺序线性
11
12             TestSqList temp = new TestSqList();
13             temp.Show();
14
15             #endregion
16
17             Console.ReadKey();
18         }
19     }
20 }

原文地址:https://www.cnblogs.com/luguoshuai/p/9238909.html

时间: 2024-07-29 16:28:17

数据结构 --- 线性表(顺序存储结构)的相关文章

数据结构——线性表顺序存储结构

 关于线性表 线性表是零个或者多个数据元素的集合.它主要有以下三个特征: 1:线性表的数据元素之间是有顺序的. 2:线性表中数据元素个数是有限的. 3:线性表中数据元素数据类型是相同的. 关于线性表的操作,主要有 创建线性表.销毁线性表.清空线性表.将元素插入线性表.将元素从线性表中删除.获取线性表中某个位置的元素.获取线性表的长度. 线性表主要有两种存储结构: 1:线性表的顺序存储结构,c语言中的数组及采用这种方式. 2:线性表的链式存储结构. 关于顺序存储结构 定义: 是指用一段地址连续的内

数据结构 - 线性表顺序存储结构

线性表 线性表是一种典型的线性结构.其基本特点是线性表中的数据元素是有序且是有限的.在这种结构中: ① 存在一个唯一的被称为"第一个"的数据元素: ② 存在一个唯一的被称为"最后一个"的数据元素: ③ 除第一个元素外,每个元素均有唯一一个直接前驱: ④ 除最后一个元素外,每个元素均有唯一一个直接后继. 线性表(Linear List) :是由n(n≧0)个数据元素(结点)a1,a2, -an组成的有限序列.该序列中的所有结点具有相同的数据类型. 线性表中的数据元素

数据结构---线性表---顺序存储结构

头文件 header.h #ifndef _LIST_H #define _LIST_H #include <stdio.h> #include <stdlib.h> #include <memory.h> #define MY_TYPE int /*0:int 1:double 2:float 3:char*/ #define _MY_TYPE_ 0 #define LIST_INIT_SIZE 3 /*单位:MY_TYPE*/ #define LIST_INCRE_

线性表顺序存储结构的c语言实现

线性表顺序存储结构用C实现的操作 <1>声明一个线性表的顺序存储结构 <2> 初始化顺序线性表 <3>判断是否为空 <4>清空列表 <5>返回当前长度(线性表内元素个数) <6>返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 <7>返回L中第1个与e满足关系的数据元素的位序.若这样的数据元素不存在,则返回值为0 <8>在L中第i个位置之前插入新的数据元素e,L的长度加1 <9>

数据结构与算法-线性表顺序存储结构删除操作的实现

这一章节我们来看一下线性表顺序存储结构删除操作的简单实现 package com.ray.testobject; public class Test { private Object[] list; public Object[] getList() { return list; } /** * 初始化list * * @param num * 元素个数 */ private void iniList(int num) { list = new Object[num]; for (int i =

数据结构与算法-总结线性表顺序存储结构的优缺点

这一章节主要总结线性表顺序存储结构的优缺点. 在总结之前,我们来讨论一下线性表顺序存储结构的执行方法的时间复杂度: 存储.读取:O(1) 插入.删除:O(n) 优点: 1.无需为表中的逻辑关系增加额外的存储空间 2.可以快速存取表中对象 缺点: 1.插入和删除需要移动大量的对象 2.存储设备的碎片化 3.当线性表过大的时候,很难确定长度 版权声明:本文为博主原创文章,未经博主允许不得转载.

线性表—顺序存储结构

线性表——顺序存储结构 我理解的顺序存储就是 存储的一组元素在内存中呈线性排列,地址相邻,就像火车一样,每个车厢都可以看做是一个元素,元素门内首尾相连且地址相邻,书看的是高一凡老师的书,学完后自己写一下总结和体会,一来加深印象,二来可以方便自己复习. 顺序存储结构似乎都是用数组来实现的,也就是以数组为核心,外面加了许多很方便的操作(函数)进行封装,然后就说这叫[顺序存储结构]——数组的深加工之后的产品 顺序存储结构的基本功能有以下几个: name:     sqlist private: T *

数据结构线性表顺序结构的实现

package com.he.list; import java.util.Arrays; import org.w3c.dom.ls.LSException; class ArrayList { private int length;// the list's length private int[] store;// store the data // initialize an empty list public ArrayList initList(String name) { retu

数据结构-线性表顺序存储(c++)

数据结构-线性表顺序存储(c++) 2018-09-06 List.h  //头文件 1 #define OK 1 2 #define ERRO0R 0 3 #define TRUE 1 4 #define FALSE 0 5 #define MAXSIZE 20 //存储空间初始分配量 6 7 typedef int Status; //Status 函数结果状态码 8 typedef int ElemType; //ElemType 据具体情况而定 9 10 class SqList 11

线性表-顺序存储结构

线性表-顺序存储结构 顺序存储结构 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素 三个属性 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置 线性表的最大存储容量:数组的长度MaxSize 线性表的当前长度:length 数据长度和线性表长度的区别 数据长度就是数组的长度,存放线性表的存储空间的长度,存储分配后这个量一般是不变的 线性表长度是线性表中数据元素的个数,随着线性表的删除插入操作,这个长度是改变的 在任何时刻,数组的长度大于等于线性表