简单说一下,什么是数据结构吧
百度定义:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关
数据结构大致包含以下几种存储结构:
线性表,还可细分为顺序表、链表、栈和队列;
树结构,包括普通树,二叉树,线索二叉树等;
图存储结构;
过于具体的大家自行百度吧,这里主要想讲一下线性表在C#中的使用
1.使用BCL中的List线性表
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _001线性表介绍List_T
{
class Program
{
static void Main(string[] args)
{
//1.使用BCL中的List线性表
List<string> strList = new List<string>();
strList.Add("1234");//0
strList.Add("345");//1
strList.Add("453");//2
Console.WriteLine(strList[1]);//通过索引器访问元素
strList.Remove("453");
Console.WriteLine(strList.Count);
strList.Clear();
Console.WriteLine(strList.Count);
Console.ReadKey();
}
}
}
除此之外的其他一些线性表的方法操作:
线性表的接口定义:接下来我们会一一去实现它们
public interface IListDS{
int GetLength();//求长度
void Clear();//清空操作
bool IsEmpty();//判断线性表是否为空
void Add(T item,int i);//插入操作
T Delete(int i);//删除操作
T GetElem(int i);//取表元
T this[int index]{get;}//定义一个索引器 获取元素
int Locate(T value);//按值查找
}
线性表的实现方式
顺序表(数组天生具有顺序表的数据存储区域的特性)
单链表
双向链表
循环链表
2.使用我们自己定义的方式去实现
定义线性表的接口
同一工程下创建的新类IListDS.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _001线性表介绍List_T
{
//T是泛型
interface IListDS<T> {
int GetLength();
void Clear();
bool IsEmpty();
void Add(T item);
void Insert(T item, int index);
T Delete(int index);
T this[int index] { get; }
T GetEle(int index);
int Locate(T value);
}
}
顺序表的实现
同一工程下创建的新类SeqList.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//顺序表实现方式
namespace _001线性表介绍List_T
{
class SeqList<T> : IListDS<T>
{
private T[] data;//用来存储数据
private int count = 0;//表示存了多少个数据
//该类的构造函数
public SeqList(int size)//size就是最大容量
{
data = new T[size];
count = 0;
}
//表示调用这个类的构造函数并传入它的容量
public SeqList() : this(10)//默认构造函数容量是10
{
}
//取得数据的个数
public int GetLength()
{
return count;
}
public T this[int index]
{
get { return GetEle(index); }
}
//添加数据
public void Add(T item)
{
if (count == data.Length)//当前数组已经存满
{
Console.WriteLine("当前顺序表已经存满,不允许再存入");
}
else
{
data[count] = item;
count++;
}
}
public void Clear()
{
count = 0;
}
//删除某个索引下的元素,并把该索引之后 的元素向前移动
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;
}
//输入索引,得到该索引对应的元素
public T GetEle(int index)
{
if (index >= 0 && index <= count - 1)//索引存在
{
return data[index];
}
else
{
Console.WriteLine("索引不存在");
return default(T);//default方法可以取得一个类型的默认值
}
}
//插入,在某个索引处插入某个元素,该索引原先的以及之后的元素都向后移动一位
public void Insert(T item, int index)
{
for (int i = count-1; i >= index; i--)
{
data[i + 1] = data[i];
}
data[index] = item;
count++;
}
//是否为空列表
public bool IsEmpty()
{
return count == 0;//返回count是否等于0
}
//查找某个元素在列表中有没有,并返回列表的索引
public int Locate(T value)
{
for (int i = 0; i < count; i++)
{
if (data[i].Equals(value))
{
return i;
}
}
return -1;//表示不存在
}
}
}
主程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _001线性表介绍List_T
{
class Program
{
static void Main(string[] args)
{
1.使用BCL中的List线性表
//List<string> strList = new List<string>();
//strList.Add("1234");//0
//strList.Add("345");//1
//strList.Add("453");//2
//Console.WriteLine(strList[1]);//通过索引器访问元素
//strList.Remove("453");
//Console.WriteLine(strList.Count);
//strList.Clear();
//Console.WriteLine(strList.Count);
//Console.ReadKey();
//2.使用我们自己的顺序表
SeqList<String> seqList = new SeqList<string>();
seqList.Add("123");
seqList.Add("153");
seqList.Add("183");
Console.WriteLine(seqList.GetEle(0));
Console.WriteLine(seqList[0]);
seqList.Insert("777", 1);
for (int i = 0; i < seqList.GetLength(); i++)
{
Console.Write(seqList[i] + " ");
}
Console.WriteLine();
seqList.Delete(0);
for (int i = 0; i < seqList.GetLength(); i++)
{
Console.Write(seqList[i] + " ");
}
Console.WriteLine();
seqList.Clear();
Console.WriteLine(seqList.GetLength());
Console.ReadKey();
}
}
}
运行结果: