C#学习笔记(4)——线性表1

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值