线性表基本操作,我用C#实现的,顺序和链式两种存储方式都有实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Linear
{
class LinearList
{
}
/// <summary>
/// 顺序表
/// </summary>
/// <typeparam name="T"></typeparam>
public class MySequenceList<T>
{
private T[] m_array;
private int m_maxSize;
private int m_length;
public MySequenceList(int maxSize)
{
InitList(maxSize);
}
/// <summary>
/// 初期化
/// </summary>
/// <param name="size"></param>
private void InitList(int size)
{
m_array = new T[size];
m_maxSize = size;
m_length = 0;
}
/// <summary>
/// 查找元素e在线性表中的位置
/// </summary>
/// <param name="e">元素e</param>
/// <returns>找到返回位置,找不到返回-1</returns>
public int Search(T e)
{
for (int i = 0; i < m_length; i++)
{
if (m_array[i].Equals(e))
return i + 1;
}
return -1;
}
/// <summary>
/// 在第i个元素的位置,插入e;
/// </summary>
/// <param name="i">插入位置</param>
/// <param name="e">元素e</param>
/// <returns>是否成功</returns>
public bool Insert(int i,T e)
{
if (m_length == m_maxSize)
return false;
if (i < 1 || i > m_length+1)
return false;
for (int j = m_length - 1; j >= i-1; j--)
{
m_array[j + 1] = m_array[j];
}
m_array[i-1] = e;
m_length++;
return true;
}
/// <summary>
/// 删除表中第i个元素
/// </summary>
/// <param name="i">元素位置</param>
/// <returns>是否成功</returns>
public bool Delete(int i)
{
if (m_length == 0)
return false;
for (int j = i; j < m_length; j++)
{
m_array[j - 1] = m_array[j];
}
m_length--;
return true;
}
/// <summary>
/// 修改表元素
/// </summary>
/// <param name="i">修改元素的位置</param>
/// <param name="e">修改的值</param>
/// <returns>是否成功</returns>
public bool Modify(int i, T e)
{
if (i < 1 || i > m_length)
return false;
m_array[i - 1] = e;
return true;
}
/// <summary>
/// 返回第i个元素的值
/// </summary>
/// <param name="i">元素的位置</param>
/// <param name="e">返回的值</param>
/// <returns>是否成功</returns>
public bool GetByIndex(int i, ref T e)
{
if (i < 1 || i > m_length)
return false;
e = m_array[i - 1];
return true;
}
}
/// <summary>
/// 带头结点的链表
/// </summary>
/// <typeparam name="T"></typeparam>
public class MyLinkedList<T>
{
/// <summary>
/// 头结点
/// </summary>
private Node<T> m_head;
/// <summary>
/// 链表长度
/// </summary>
private int m_length;
public MyLinkedList()
{
Init();
}
private void Init()
{
m_head = new Node<T>();
m_head.next = null;
m_length = 0;
}
/// <summary>
/// 头插法生成链表
/// </summary>
/// <param name="arr">生成链表用的数组</param>
public void HeadCreate(T [] arr)
{
foreach (T data in arr)
{
Node<T> node = new Node<T>();
node.data = data;
node.next = m_head.next;
m_head.next = node;
m_length++;
}
}
/// <summary>
/// 尾插法生成链表
/// </summary>
/// <param name="arr">生成链表用的数组</param>
public void FootCreate(T[] arr)
{
Node<T> foot = m_head;
foreach (T data in arr)
{
Node<T> node = new Node<T>();
node.data = data;
node.next = foot.next;
foot.next = node;
foot = node;
m_length++;
}
}
/// <summary>
/// 在i位置处插入一个结点
/// </summary>
/// <param name="i"></param>
/// <param name="e">插入结点值</param>
/// <returns></returns>
public bool Insert(int i,T e)
{
if (i < 1 || i > m_length)
return false;
Node<T> node = new Node<T>();
node.data = e;
Node<T> temNode = m_head;
int j = 1;
while (j < i)
{
temNode = temNode.next;
j++;
}
node.next = temNode.next;
temNode.next = node;
m_length++;
return true;
}
/// <summary>
/// 删除一个结点
/// </summary>
/// <param name="i"></param>
/// <returns>是否成功</returns>
public bool Delete(int i)
{
if (i < 1 || i > m_length)
return false;
Node<T> temNode = m_head;
int j=1;
while (j<i)
{
temNode = temNode.next;
}
temNode.next = temNode.next.next;
return true;
}
/// <summary>
/// 修改第i个结点的值
/// </summary>
/// <returns></returns>
public bool Modify(int i, T e)
{
if (i < 1 || i > m_length)
return false;
Node<T> temNode = m_head;
int j = 1;
while (j <= i)
{
temNode = temNode.next;
}
temNode.data = e;
return true;
}
/// <summary>
/// 查找元素e在链表中的位置
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
public int Search(T e)
{
Node<T> temNode = m_head;
int j = 1;
while (j <= m_length)
{
temNode = temNode.next;
if (temNode.data.Equals(e))
return j;
}
return -1;
}
/// <summary>
/// 删除所有重复结点
/// </summary>
public void DeleteALLSameData()
{
if (m_length == 0)
{
return;
}
Node<T> node1,node2;
node1 = m_head.next;
while (node1.next != null)
{
node2 = node1;
while (node2.next != null)
{
if (node1.data.Equals(node2.next.data))
{
node2.next = node2.next.next;
}
else
{
node2 = node2.next;
}
}
node1 = node1.next;
}
}
}
/// <summary>
/// 定义结点
/// </summary>
/// <typeparam name="T"></typeparam>
public class Node<T>
{
public T data;
public Node<T> next;
}
}
温馨提示:答案为网友推荐,仅供参考