• C# 顺序表 SequenceList


    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();
            }
        }
    }
    
    
    
  • 相关阅读:
    SSE图像算法优化系列四:图像转置的SSE优化(支持8位、24位、32位),提速4-6倍
    SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
    SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(二)。
    SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(一)。
    SSE图像算法优化系列一:一段BGR2Y的SIMD代码解析。
    13行代码实现最快速最高效的积分图像算法。
    超像素经典算法SLIC的代码的深度优化和分析。
    图像增强系列之图像自动去暗角算法。
    标准的基于欧式距离的模板匹配算法优源码化和实现(附源代码)。
    O(1)效率的表面模糊算法优化。
  • 原文地址:https://www.cnblogs.com/Ligeance/p/2196319.html
Copyright © 2020-2023  润新知