1.线性表理解:
线性表是最简单最基本的数据结构,是线性结构的抽象,线性结构的特点是结构中的数据元素之间存在一对一的线性关系,即数据元素之间的位置关系。(1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素;(2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素。也就是说,数据元素是一个接一个的排列。因此,可以把线性表想象为一种数据元素序列的数据结构。线性表就是位置有先后关系,一个接着一个排列的数据结构。
2.c# 提供了泛型的List<T>(类)接口,实现了List<T>接口的类有List<T>
3.代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
Using System.Threading.Tasks;
namespace_xianxingbiao{
class Program{
static void Main(string[] args){
//使用BCL中的List线性表
List<string>strList=new List<string>();
strList.Add("123"); //0
strList.Add("456"); //1
strList.Add("789"); //2
Console.WriteLine(strList[1]); //索引器访问
strList.Remove("789"); //移除指定字符串
Console.WriteLine(strList.Count); //获取大小 2
strList.Clear(); //清空所有数据
Console.ReadKey();
}
}
}
4.线性表接口定义:
public interface IListDS<T> {
int GetLength(); //求长度 添加了多少数据
void Clear(); //清空数据
bool IsEmpty(); //判断线性表是否为空
void Add(T item); //添加元素
void Insert(T item, int i); //插入元素
T Delete(int i); //删除操作
T GetElem(int i); //根据下标得到元素
T this[int index]{get;}//定义一个索引器 获取元素
int Locate(T value); //根据元素得到下标
}
5.线性表实现:
顺序表:线性表的顺序是存储在内存中连续存储(存储方式和数组相同,可以按照数组理解)
接口:
namespace_xianxingbiao{
interface IListDS<T>{ //DS数据结构
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);
}
}
实现:新建类class SeqList<T>:IListDS<T>{} //自动定义接口的方法,鼠标放在该行,按住alt+enter 之后出现的一个小框点击,然后finish;
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 void Clear()
{
count=0;
}
public bool IsEmpty()
{
return count==0;
}
public void Add(T item)
{
if(count==data.Length) //当前数组已满
{
Console.WriteLine("当前顺序表已满");
}
else
{
data[count]=item;
count++;
}
}
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 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 this[int index]
{
get{return GetEle(index);}
}
public T GetEle(int index)
{
if(index>=0&&index<=count-1) //索引不存在
{
return data[index];
}
else
{
Console.WriteLine("索引不存在");
return default(T);
}
}
public int Locate(T value)
{
for(int i=0;i<count;i++)
{
if(data[i].Equals(value)) //比较data[i]与value的大小
{
return i;
}
}
return -1;
}
}
调用:
SeqList<string>seqList=new SeqList<string>();
seqListAdd("123");
seqListAdd("456");
seqListAdd("789");
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.Write();
seqList.Delete(0);
for(int i=0;i<seqList.GetLength();i++)
{
Console.Write(seqList[i]+" ");
}
Console.Write(); //换行
seqList.Clear();
Console.WriteLine(seqList.GetLength());
Console.ReadKey();
输出为:
123
123
123 777 456 789
777 456 789
0