顺序表

顺序表定义:

         /// <summary>
	/// Description of Sequence.
	/// </summary>
	public struct Sequence<T> where T:IComparable
	{
		private T[] _data;
		private int _current;
		public Sequence(int size)
		{
			_data=new T[size];
			_current=0;
		}
		
		public T[] Data
		{
			get{return _data;}
		}
		
		public int Current
		{
			get{return _current;}
			set{_current=value;}
		}
		
		public int Size
		{
			get{return _data.Length;}
		}
	}

带有指针指向可用值得数组:

              /// <summary>
	/// A array has point to show the end position of the value
	/// </summary>
	public struct SizedArray<T> where T:IComparable
	{
		private T[] _data;
		private int _current;
		public SizedArray(int size)
		{
			_data=new T[size];
			_current=0;
		}
		
		public int Current
		{
			get{return _current;}
			set{_current=value;}
		}
		
		public int Size
		{
			get{return _data.Length;}
		}
		
		public T[] GetArray()
		{
			T[] array=new T[_current];
			for(int i=0;i<_current;i++)
			{
				array[i]=_data[i];
			}
			return array;
		}
		
		public void Insert(T x)
		{
			if(_current>=Size)
			{
				return;
			}
			
			_data[_current]=x;
			_current++;
		}
	}


顺序表的实现类:

public class SequenceList<T> where T:IComparable
	{
		private Sequence<T> _sequence;
		private int _size;
		/// <summary>
		/// 
		/// </summary>
		/// <param name="size">The size of sequence list</param>
		public SequenceList(int size)
		{
			_size=size;
			_sequence=new Sequence<T>(_size);
		}
		
		/// <summary>
		/// Init the sequence list
		/// </summary>
		public void Init()
		{
			_sequence.Current=0;
		}
		
		/// <summary>
		/// At the end of sequence list,Insert a value
		/// </summary>
		/// <param name="x">The value want to be inserted</param>
		public void insert(T x)
		{
			if(IsFull()) return;
			
			_sequence.Data[_sequence.Current]=x;
			_sequence.Current++;
		}
		
		/// <summary>
		/// Print all the values of the sequence list
		/// </summary>
		public void Print()
		{
			if(IsEmpty()) return;
			
			for(int i=0;i<_sequence.Current;i++)
			{
				Console.WriteLine(" {0} ",_sequence.Data[i]);
			}
		}
		
		/// <summary>
		/// Check whether the sequence list is empty
		/// </summary>
		/// <returns>True or false</returns>
		public bool IsEmpty()
		{
			if(_sequence.Current==0)
			{
				Console.WriteLine("Sequence is empty!");
				return true;
			}
			return false;
		}
		
		/// <summary>
		/// Check whether the sequence list is full
		/// </summary>
		/// <returns>True or false</returns>
		public bool IsFull()
		{
			if(_sequence.Current>=_sequence.Size) 
			{
				Console.WriteLine("Sequence is full!");
				return true;
			}
			return false;
		}
		
		/// <summary>
		/// Check whether the specified position is exist or not
		/// </summary>
		/// <param name="i">The specified position</param>
		/// <returns>True or false</returns>
		public bool PositionIsExist(int i)
		{
			if(i<0||i>=_sequence.Current)
			{
				Console.WriteLine("Specified position is not exist!");
				return false;
			}
			return true;
		}
		
		/// <summary>
		/// Find all the positions whose values are equal to the specified value
		/// </summary>
		/// <param name="x">The specified value</param>
		/// <returns>All fulfiled condition's positions</returns>
		public int[] FindNum(T x)
		{
			SizedArray<int> array=new SizedArray<int>(_size);
			for(int i=0;i<_sequence.Current;i++)
			{
				if(_sequence.Data[i].CompareTo(x)==0)
				{
					array.Insert(i);
				}
			}
			return array.GetArray();
		}
		
		/// <summary>
		/// Get the value of the specified position
		/// </summary>
		/// <param name="i">The specified position</param>
		/// <returns>The suitable value</returns>
		public T GetDataPosition(int i)
		{
			if(!PositionIsExist(i))
			{
				return default(T);
			}
			return _sequence.Data[i];
		}
		
//		public void InsertPosition(T x,T y)
//		{
//			int position;
//			if(IsFull()) return;			
//			
//			position=FindNum(y)[0];
//			InsertPosition(x,position);
//		}
		
		/// <summary>
		/// Insert a value in the specified position
		/// </summary>
		/// <param name="x">The value</param>
		/// <param name="position">The specified position</param>
		public void InsertPosition(T x,int position)
		{
			if(IsFull()) return;
			
			if(!PositionIsExist(position)) return;
			
			for(int i=_sequence.Current-1;i>=position;i--)
			{
				_sequence.Data[i+1]=_sequence.Data[i];
			}
			_sequence.Data[position]=x;
			_sequence.Current++;
		}
		
		/// <summary>
		/// Delete a value in the specified position
		/// </summary>
		/// <param name="position">The specified position</param>
		public void DeletePosition(int position)
		{
			if(IsFull()) return;
			if(!PositionIsExist(position)) return;
			
			for(int i=position;i<_sequence.Current;i++)
			{
				_sequence.Data[i]=_sequence.Data[i+1];
			}
			_sequence.Current--;
		}
	}
原文地址:https://www.cnblogs.com/zwffff/p/2068524.html