第2章 线性表(1)

2.2 顺序表

2.2.1 顺序表的定义

在计算机内,保存线性表最简单、最自然的方式,就是把表中的元素一个接一个地放进顺序的存储单元,这就是线性表的顺序存储(Sequence Storage)。线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素,用这种方式存储的线性表叫顺序表(Sequence List)。顺序表的特点是表中相邻的数据元素在内存中位置也相邻。

C#语言中的数组在内存中占用的存储空间就是一组连续的存储空间,因此,数据具有随机存取的特点,所以,数组天生具有表示顺序表的数据存储区域的特点。

随机存取(有时亦称直接存取)代表同等时间存取一组序列中的一个随意元件。反之则称循序存取,即是需要更多时间去存取一个远端元件。

C# 实现顺序表:

    class SeqList<T>:ConsoleApplication3.ISeqList<T>
    {
        public int Maxsize{get;set;}
        private T[] data;
        public int Last { get; private set; }

        //索引器
        public T this[int index]
        {
            get
            {
                return data[index];
            }
            set
            {
                data[index] = 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");
            else
                data[++Last] = item;
        }

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

        public T Delete(int i)
        {
            T tmp = default(T);
            if (IsEmpty())
            {
                Console.WriteLine("List is empty");
                return tmp;
            }
            else if (i > Last || i < 0)
            {
                Console.WriteLine("Position is error!");
                return tmp;
            }
            else
            {
                tmp = data[i];
                for (int j = i; j < Last; j++)
                {
                    data[j] = data[j + 1];
                }
                --Last;
                return tmp;
            }
        }

        public T GetItem(int i)
        {
            if (IsEmpty() || i < 0 || i > Last + 1)
            {
                Console.WriteLine("List is empty or Position is error!");
                return default(T);
            }
            else
                return data[i];
        }

        public int Locate(T value)
        {
            if (IsEmpty())
            {
                Console.WriteLine("List is empty!");
                return -1;
            }

            for (int i = 0; i <= Last; ++i)
            {
                if (value.Equals(data[i]))
                    return i;
            }

            return -1;
        }
    }
//ISeqList.cs
using System;
namespace ConsoleApplication3
{
    interface ISeqList<T>
    {
        void Append(T item);
        void Clear();
        T Delete(int i);
        T GetItem(int i);
        int GetLength();
        void Insert(T item, int i);
        bool IsEmpty();
        bool IsFull();
        int Locate(T value);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值