using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SequenceList { public interface IListDS<T> { int GetLength(); void Clear(); bool IsEmpty(); void Append(T item); void Insert(T item, int i); T Delete(int i); T GetElem(int i); int Locate(T value); } public class SeqList<T> : IListDS<T> { private int maxsize; private T[] data; private int last; public T this[int index] { get { return data[index]; } set { data[index] = value; } } public int Last { get { return last; } } public int Maxsize { get { return maxsize; } set { maxsize = value; } } public SeqList(int size) { data = new T[size]; maxsize = size; last = -1; } public int GetLength() { return last + 1; } public void Clear() { last = -1; } public bool IsEmpty() { if (last == -1) { return true; } else { return false; } } public bool IsFull() { if (last == maxsize - 1) { return true; } else { return false; } } public void Append(T item) { if (IsFull()) { Console.WriteLine("List is full."); return; } data[++last] = item; } public void Insert(T item, int i) { if (IsFull()) { Console.WriteLine("List is full."); return; } if (i < 1 || i > last + 2) { Console.WriteLine("Location is error."); return; } if (i == last + 2) { data[last + 1] = item; } else { for (int j = last; j > i; j++) { data[j + 1] = data[j]; } data[i - 1] = item; } last++; } public T Delete(int i) { T tmp = default(T); if (IsEmpty()) { Console.WriteLine("List is empty."); return tmp; } if (i < 1 || i > last + 1) { Console.WriteLine("Position is error"); return tmp; } if (i == last + 1) { tmp = data[last--]; } else { tmp = data[i - 1]; for (int j = i -1; j < last +1; j++) { data[j] = data[j + 1]; } } last--; return tmp; } public T GetElem(int i) { if (IsEmpty() || i < 1 || i >last +1) { Console.WriteLine("List is empty, or position is error."); return default(T); } return data[i - 1]; } public int Locate(T value) { if (IsEmpty()) { Console.WriteLine("List is empty"); return -1; } int i = 0; for (i = 0; i < last+1; i++) { if (data[i].Equals(value)) { break; } } if (i>last) { return -1; } else { return i; } } public void PopOrder(SeqList<int> L) { for (int i = L.GetLength() - 1; i >0; i--) { for (int j = 0; j < i; j++) { if (L[i]<L[j]) { int temp = L[i]; L[i] = L[j]; L[j] = temp; } } } } public SeqList<int> ReverseSeqList(SeqList<int> L) { if (L == null || L.GetLength() < 2) { return L; } SeqList<int> result = L; int tmp = 0; int len = result.GetLength(); for (int i = 0; i < len/2; i++) { tmp = result[i]; result[i] = result[len - i - 1]; result[len - i - 1] = tmp; } return result; } public SeqList<int> Merge(SeqList<int> La, SeqList<int> Lb) { SeqList<int> Lc = new SeqList<int>(La.GetLength() + Lb.GetLength()); int a = 0, b = 0; while (a<La.GetLength() && b<Lb.GetLength()) { if (La[a]<Lb[b]) { Lc.Append(La[a++]); } else { Lc.Append(Lb[b++]); } } while (a<La.GetLength()) { Lc.Append(La[a++]); } while (b<Lb.GetLength()) { Lc.Append(Lb[b++]); } return Lc; } public SeqList<int> Purge(SeqList<int> La) { SeqList<int> Lb = new SeqList<int>(La.GetLength()); Lb.Append(La[0]); for (int i = 1; i < La.GetLength(); i++) { int j = 0; for (; j < Lb.GetLength(); j++) { if (Lb[j]==La[i]) { break; } } if (j > Lb.GetLength() - 1) { Lb.Append(La[i]); } } return Lb; } } class Program { static void Main(string[] args) { SeqList<int> intList = new SeqList<int>(100); intList.Append(2); intList.Append(5); intList.Append(20); intList.Append(6); intList.Append(9); intList.Append(13); intList.Append(45); intList.Append(68); intList.Append(91); intList.Append(34); intList.Append(71); intList.Append(85); SeqList<int> intList2 = new SeqList<int>(100); intList2.Append(4); intList2.Append(6); intList2.Append(75); intList2.Append(86); intList2.Append(37); intList2.Append(48); intList2.Append(63); intList2.Append(92); intList2.Append(8); intList2.Append(2); for (int i = 0; i < intList.GetLength(); i++) { Console.Write(intList[i] + " "); } Console.WriteLine(); for (int i = 0; i < intList2.GetLength(); i++) { Console.Write(intList2[i] + " "); } Console.WriteLine(); intList.PopOrder(intList); intList2.PopOrder(intList2); for (int i = 0; i < intList.GetLength(); i++) { Console.Write(intList[i] + " "); } Console.WriteLine(); for (int i = 0; i < intList2.GetLength(); i++) { Console.Write(intList2[i] + " "); } Console.WriteLine(); SeqList<int> intList3 = new SeqList<int>(100); intList3 = intList3.Merge(intList, intList2); for (int i = 0; i < intList3.GetLength(); i++) { Console.Write(intList3[i] + " "); } Console.WriteLine(); SeqList<int> intList4 = new SeqList<int>(100); intList4 = intList4.Purge(intList3); for (int i = 0; i < intList4.GetLength(); i++) { Console.Write(intList4[i] + " "); } Console.WriteLine(); } } }