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();
}
}
}