zoukankan      html  css  js  c++  java
  • 数据结构-顺序表

    大学以来一直没怎么认真学过数据结构,现在找工作了 都看重 学过数据结构和算法,所以现在开始认真学。

    实现:接口(往后的链表文章都是使用这个接口)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _001_线性表
    {
        interface IListDS<T>
        {
            int GetLength();
            void Clear();
            bool IsEmpty();
            void Add(T item);
            void Insert(T item, int index);
            T Delete(int index);
            T this[int index] { get; }
            T GetEle(int index);
            int Locate(T value);
    
        }
    }

    顺序表实现:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _001_线性表
    {
        /// <summary>
        /// 顺序表 实现方式
        /// </summary>
        class SeqList<T> : IListDS<T>
        {
            private T[] data;//存储数据
            private int count = 0;//存了多少数据
            public SeqList(int size)  //size最大容量
            {
                data = new T[size];
                count = 0;
            }
            public SeqList() : this(10)//默认构造函数 容量是10
            {
    
            }
    
            /// <summary>
            /// 返回指定序列号得元素 
            /// </summary>
            /// <param name="index"></param>
            /// <returns></returns>
            public T this[int index] => GetEle(index);
    
            /// <summary>
            /// 添加数据
            /// </summary>
            /// <param name="item"></param>
            public void Add(T item)
            {
                if (count == data.Length)//当前数组已经存满
                {
                    Console.WriteLine("当前顺序表已经存满,不允许再存入");
                }
                else
                {
                    data[count] = item;
                    count++;  
                }
            }
    
            /// <summary>
            /// 清空
            /// </summary>
            public void Clear()
            {
                count = 0;
    
            }
    
            public T Delete(int index)
            {
                T temp = data[index];
                for (int i = index+1; i < count; i++) //
                {
                    data[i-1] = data[i];//把数据向前移动
                }
                count--;
                return temp;
            }
    
            public T GetEle(int index)
            {
                if(count-1>=index && index>=0)//索引存在  
                {
                     return data[index];
                }
                else
                {
                    Console.WriteLine("索引不存在");
                    return default(T);
                }
             
            }
    
            /// <summary>
            /// 取得数据个数
            /// </summary>
            /// <returns></returns>
            public int GetLength()
            {
                return count;  
            }
    
    
            /// <summary>
            /// 插入元素
            /// </summary>
            /// <param name="item"></param>
            /// <param name="index"></param>
            public void Insert(T item, int index)
            {
                for (int i = count - 1; i >= index; i--) //反序遍历  从后面开始移动元素
                {
                    data[i + 1] = data[i];
                }
                data[index] = item;
                count++;
            }
    
            /// <summary>
            /// 是否为空
            /// </summary>
            /// <returns></returns>
            public bool IsEmpty()
            {
                return count == 0;
            }
    
            /// <summary>
            /// 寻找该值所在得位置
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            public int Locate(T value)
            {
                for (int i = 0; i < count; i++)
                {
                    if (data[i].Equals(value))
                    {
                        return i;
                    }
                }
                return -1;
            }
        }
    }
  • 相关阅读:
    LeetCode 264. Ugly Number II
    LeetCode 231. Power of Two
    LeetCode 263. Ugly Number
    LeetCode 136. Single Number
    LeetCode 69. Sqrt(x)
    LeetCode 66. Plus One
    LeetCode 70. Climbing Stairs
    LeetCode 628. Maximum Product of Three Numbers
    Leetcode 13. Roman to Integer
    大二暑假周进度报告03
  • 原文地址:https://www.cnblogs.com/rongweijun/p/8072564.html
Copyright © 2011-2022 走看看