C#数据结构--线性表--List
来源:互联网 发布:网络视频广告投放 编辑:程序博客网 时间:2024/04/30 14:18
线性表:
public 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);
}
顺序实现方式:(List)
//顺序实现方式public class SeqList<T> : IListDS<T>{ private T[] data; //用来存储数据 private int count = 0; //表示存了多少数据 public SeqList(int size) { data = new T[size]; count = 0; } public SeqList() : this(10) //默认构造函数 容量是10 { } public void Add(T item) { if (count == data.Length) { Debug.Log("当前顺序已经存满,不允许在存入"); } else { data[count++] = item; } } public T GetEle(int index) { if (index >= 0 && index <= count - 1) //索引存在 { return data[index]; } else { Debug.Log( "索引不存在"); return default(T); } } public T this[int index] { get { return GetEle(index); } } public void Clear() { count = 0; } public bool IsEmpty() { return count == 0; } public int GetLength() { return 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 int Locate(T value) { for (int i = 0; i < count; i++) { if (data[i].Equals(value)) { return i; } } return -1; }}
单链表:
//接口里头的方法public 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);}
//单链表结点public class Node<T>{ private T data; //存储数据 private Node<T> next; //指针 用来指向下一个元素 public Node() { data = default(T); next = null; } public Node(T value) { this.data = value; next = null; } public Node(T value, Node<T> next) { this.data = value; this.next = next; } public Node(Node<T> next) { this.next = next; } public T Data { get { return this.data; } set { this.data = value; } } public Node<T> Next { get { return this.next; } set { this.next = value; } }}
链表插入的图(理解):
删除的图:
单链表的实现:
public class LinkList<T> : IListDS<T>{ private Node<T> head; //存储一个头结点 public int GetLength() { Node<T> temp = head; int count = 1; if (head == null) { return 0; } else { while (true) { if (temp.Next != null) { temp = temp.Next; count++; } else { break; } } return count; } } public void Clear() { head = null; //清空直接让头结点为空,其他都无法访问了 } public bool IsEmpty() { return head == null; } public void Add(T item) { Node<T> newNode=new Node<T>(item); //根据新的数据创建一个新节点 if (head == null) //如果头结点为空,那么这个新节点就是头结点 { head = newNode; } else {//把新来的结点放到链表的尾部 //要访问链表的尾结点 Node<T> temp = head; while (true) { if (temp.Next != null) { temp = temp.Next; } else { break; } } temp.Next = newNode; //把新来的结点放到链表的尾部 } } public void Insert(T item, int index) { Node<T> newNode=new Node<T>(item); if (index == 0) //插入到头结点 { newNode.Next = head; head = newNode; } else { Node<T> temp = head; for (int i = 1; i <= index - 1; i++) //移动到当前插入节点的前一个 { //让temp向后移动一个位置 temp = temp.Next; } Node<T> preNode = temp; Node<T> currentNode = temp.Next; preNode.Next = newNode; newNode.Next = currentNode; } } public T Delete(int index) { Node<T> newNode=new Node<T>(); T data; if (index == 0) //删除头结点 { data = head.Data; head = head.Next; } else //删除的不是头结点 { Node<T> temp = head; for (int i = 1; i <=index - 1; i++) //移动到当前位置的上一个节点 { temp = temp.Next; } Node<T> preNode = temp; Node<T> currentNode = temp.Next; Node<T> nextNode = temp.Next.Next; data = currentNode.Data; preNode.Next = nextNode; } return data; } public T this[int index] { get { Node<T> temp = head; for (int i = 1; i <= index; i++) { temp = temp.Next; } return temp.Data; } } public T GetEle(int index) { return this[index]; } public int Locate(T value) { Node<T> temp = head; int index = 0; if (head == null) { return -1; } else { while (true) { if (temp.Data.Equals(value)) { return index; } else { if (temp.Next != null) { temp = temp.Next; index++; } else { break; } } } return -1; } }}
阅读全文
1 0
- C#数据结构--线性表--List
- 【数据结构学习】线性表List
- 数据结构学习笔记---线性表LIST
- 数据结构_线性表顺序sequence List
- 数据结构-线性表(List)1
- 【数据结构】线性表(Linear List)
- C#数据结构篇(一)线性表
- C#数据结构(一)----线性表
- c#中的list数据结构
- C++数据结构之List--线性实现
- 【数据结构】单向线性链式物理结构list
- 线性表(list)
- list线性表赋值
- 线性表(Linear List)
- 线性表List
- sequence list 线性表
- sequence list 线性表
- 线性表list
- eclipse里同一个文件分屏
- PullToRefreshListView的使用
- EEPROM和flash的区别
- 最简单的MVP模式,简洁易懂。
- 为什么未来是全栈工程师的世界?
- C#数据结构--线性表--List
- 使用inline-block进行列表布局的时候,发现垂直方向上也会有空隙
- Servlet实例
- 禁止浏览器自动填充到表单
- 简单工厂模式和工厂方法模式适用场景
- Chrome调试合成jsp页面js代码
- jsp页面获取session中的值
- logstash5.0版本之后导入es数据指定ik分词器详解
- SQL学习