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

本文是作者复习数据结构的笔记,聚焦于C#中的线性表顺序存储结构。介绍了线性表的基本概念,通过接口定义、添加、插入、删除和获取元素等操作详细阐述了顺序存储结构的实现。
摘要由CSDN通过智能技术生成

前言

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

举例

白羊座,金牛座,双子座,巨蟹座,狮子座,处女座,天秤座,天蝎座,射手座,摩羯座,水瓶座,双鱼座,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; 
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值