C# 线性表之顺序存储结构

来源:互联网 发布:windows 10使用详解 编辑:程序博客网 时间:2024/05/22 05:55

前言

毕业大半年了,发现自己在数据结构与算法这一块的知识不扎实,所以重新回顾一下大学学的知识并且做一些笔记。谢谢大家。

举例

白羊座,金牛座,双子座,巨蟹座,狮子座,处女座,天秤座,天蝎座,射手座,摩羯座,水瓶座,双鱼座,12个星座是按顺序排列的,都有自己固定的位置,除了第一个白羊座没有前驱,和最后一个双鱼座没有后驱,其他的都有前驱和后驱。

定义

线性表可以说是最简单的数据结构,它的描述为:n个数据元素的有限序列。
记为:L=(a1,a2,…,an),
顺序存储结构是用一段连续地址依次存储线性表中的数据元素。

interface

我们先来定义一个线性表接口,

namespace 线性表{    public interface IListDS<T>    {        int GetLength();//去长度        void Clear();//清空        bool IsEmpty();//是否为空        bool IsFull();//是否越界        void Append(T item);//添加        void Insert(T item, int index);//插入        T Delete(int index);//删除        T GetElem(int index);//通过索引获取值        int Locate(T value); //按值查找。        void Reverse(); //倒置    }}

顺序存储结构

namespace 线性表{    public class SeqList<T>:IListDS<T>    {        private int maxSize; //数组大小        private T[] date;  //数组        private int last; //最后一个索引     } }

添加

        public void Append(T item)        {            if (IsFull())            {                Console.WriteLine("List is full!");                return;            }            date[last++] = item;        }

插入

        public void Insert(T item, int index)        {            if (IsFull())            {                Console.WriteLine("List is full");                return;            }            if (index < 0 || index > last)            {                Console.WriteLine("Position is error!");                return;            }            for (int i = last; i >= index; i--)            {                date[i + 1] = date[i];            }            date[index] = item;            last++;        }

删除

        public T Delete(int index)        {            T temp = default(T);            if (IsEmpty())            {                Console.WriteLine("List is empty!");                return temp;            }            if (index < 0 || index > last)            {                Console.WriteLine("Position is error!");                return temp;            }            for (int i = index; i < last; i++)            {                date[i] = date[i + 1];            }            last--;            return temp;        }

获取元素

        public T GetElem(int index)        {            if (IsEmpty() || index > last || index < 0)            {                Console.WriteLine("List is empty or Position is error!");                return default(T);            }            return date[index];        }

更多详细代码

using System;namespace 线性表{    public class SeqList<T>:IListDS<T>    {        private int maxSize;        private T[] date;        private int last;        /// <summary>        /// 索引器        /// </summary>        /// <param name="index"></param>        /// <returns></returns>        public T this[int index]        {            get { return date[index]; }            set { date[index] = value; }        }        public int Last        {            get { return last; }        }        public int MaxSize        {            get { return maxSize; }            set { maxSize = value; }        }        public SeqList(int size)        {            date = new T[size];            maxSize = size;            last = 0;        }         public int GetLength()        {            return last;        }        public void Clear()        {            last = 0;        }        public bool IsEmpty()        {            bool _isEmpty = last == 0 ? true : false;            return _isEmpty;        }        public bool IsFull()        {            bool _isFull = last == maxSize ? true : false;            return _isFull;        }        public void Append(T item)        {            if (IsFull())            {                Console.WriteLine("List is full!");                return;            }            date[last++] = item;        }        public void Insert(T item, int index)        {            if (IsFull())            {                Console.WriteLine("List is full");                return;            }            if (index < 0 || index > last)            {                Console.WriteLine("Position is error!");                return;            }            for (int i = last; i >= index; i--)            {                date[i + 1] = date[i];            }            date[index] = item;            last++;        }        public T Delete(int index)        {            T temp = default(T);            if (IsEmpty())            {                Console.WriteLine("List is empty!");                return temp;            }            if (index < 0 || index > last)            {                Console.WriteLine("Position is error!");                return temp;            }            for (int i = index; i < last; i++)            {                date[i] = date[i + 1];            }            last--;            return temp;        }        public T GetElem(int index)        {            if (IsEmpty() || index > last || index < 0)            {                Console.WriteLine("List is empty or Position is error!");                return default(T);            }            return date[index];        }        public int Locate(T value)        {            if (IsEmpty())            {                Console.WriteLine("List is empty!");                return -1;            }            int i;            for (i = 0; i < last; i++)            {                if(value.Equals(date[i]))                    break;            }            if (i >= last)                return -1;            return i;        }        public void Reverse()        {            T temp = default(T);            int _len = GetLength() - 1;            for (int i = 0; i <= _len/2; i++)            {                temp = date[i];                date[i] = date[_len - i];                date[_len - i] = temp;             }        }    }}
0 0
原创粉丝点击