C#实现数据结构(一)

                             c#实现线性表

                 以下是本人用C#实现的数据结构,代码已经正确运行

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 线性表
{
   
    public class SeqList<T> : System.Collections.Generic.IEnumerable<T>
    {
        //线性表的最大容量
        private int maxsize;
        //数组,用来存储线性表中的元素
        T[] date;
        //最后一个元素的位置
        private int last;
        //索引器
        public T this[int index]
        {
            get
            {
                return date[index];
            }
            set
            {
                date[index] = value;
            }
        }
        //构造器
        public SeqList(int size)
        {
            date = new T[size];
            maxsize = size;
            //-1表示为空表
            last = -1;
        }
        //属性
        public int Maxsize
        {
            get
            {
                return maxsize;
            }
            set
            {
                maxsize = value;
            }
        }
        public int Last
        {
            get
            {
                return last;
            }
            set
            {
                last = value;
            }
        }

        //求顺序表的长度
        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("线性表已经满了!");
                return;
            }
            date[++last] = item;
        }
        //插入操作,其中item 表示要插入的数据,i是表示插入的位置,并不是数组的下标
        public void Insert(T item, int i)
        {
            if (IsFull())
            {
                Console.WriteLine("线性表已经满啦!");
                return;
            }
            if (i < 1 || i > last + 2)
            {
                Console.WriteLine("不能在此位置插入数据!!");
                return;
            }
            //因为i的取值是从1开始的
            if (i == last + 2)
            {
                date[i - 1] = item;
            }
            else
            {
                //在表的其他位置插入数据
                for (int j = last; j >= i - 1; j--)
                {
                    date[last + 1] = date[last];

                }
                date[i - 1] = item;
            }
            //修改表长
            ++last;
        }
        public T Delete(int i)
        {
            T temp = default(T);
            //判短线性表是否为空
            if (IsEmpty())
            {
                Console.WriteLine("表为空,没有数据可以删除!");
                return temp;
            }
            //判断删除的数据位置是否正确
            if (i < 1 || i > last + 1)
            {
                Console.WriteLine("错误操作!");
                return temp;
            }
            if (i == last + 1)
            {
                temp = date[i - 1];
                last--;
                return temp;

            }
            else
            {
                temp = date[i - 1];
                for (int j = i-1; j <= last ; j++)
                {
                    date[j] = date[j + 1];
                }
               
            }
            --last;
            return temp;
        }
        //取表元
        public T GetElem(int i)
        {
            T temp = default(T);
            if (IsEmpty())
            {
                Console.WriteLine("线性表为空!");
                return temp;
            }
            if (i < 1 || i > last + 1)
            {
                Console.WriteLine("错误操作!");
                return temp;
            }
            return date[i - 1];
        }
        //按值查找
        public int Locate(T value)
        {
            if (IsEmpty())
            {
                Console.WriteLine("线性表为空!");
                return -1;
            }
            int i;
            for ( i = 0; i <= last; i++)
            {
                if (value.Equals(date[i]))
                {
                    break;
                }
            }
            return i + 1;
        }

 

        #region IEnumerable<T> 成员

        public IEnumerator<T> GetEnumerator()
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IEnumerable 成员

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }

        #endregion
    }
    class Program
    {
        static void Main(string[] args)
        {
            SeqList<int> ss=new SeqList<int>(5);
            for (int i = 0; i < 5; i++)
            {
                ss.Append(i);
            }
            //取长度
            Console.WriteLine(ss.GetLength().ToString());
            Console.WriteLine(ss.IsEmpty());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值