zoukankan      html  css  js  c++  java
  • C#数据结构(三)串和数组

    1)C#数据结构(一)----线性表
    2)C#数据结构(二)----栈和队列

    一、关于C#中的字符串:

    1)串是由连续存储的字符组成
    2)C#中的串具有恒定不变的特性,即 一旦被创建,就不能改变长度或者改变其中任何的字符。
    3)串的连接、插入和删除等操作都是生成了新串而没有改变原串。
    4)继承自 System.object。所以是引用类型(int,bool,char 等都是struct 不是class,是值类型)。
    5)System.String 是密封类,所以不能被继承。
    6)虽然System.String 是引用类型,但C#中将String 看作是基元类型,所以不用 new操作符创建实例,而是使用字符串驻留的机制。
    7)System.String继承自 IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>。
    8)C#提供了StringBuilder类型来支持高效地动态创建字符串。

    下面是自定义一个string类,类中包含一个字段,用以存放字符序列的数组,还有一些常用的串操作。

    String
     public class StringDS
        {
           
    private char[] data;//char数组
           
    //索引器
           public char this[int index]
            {
                
    get 
                {
                    
    return data[index];
                }
                
    set
                {
                    data[index] 
    = value;
                }
            }
           
    //构造函数
           public StringDS(char[] arr)
            {
                data 
    = new char[arr.Length];
                
    for (int i = 0; i < arr.Length; i++)
                {
                    data[i] 
    = arr[i];
                }
            }
           
    //构造函数 
           public StringDS(int len)
            {
                
    char[] arr = new char[len];
                data 
    = arr;
            }
           
    //求串长 
           public int GetLength()
            {
                
    return data.Length;
            } 
           
    //串比较 
           public int Compare(StringDS s) 
           {  
              
    int len=((this.GetLength()<=s.GetLength())? 
              
    this.GetLength():s.GetLength()); 
              
    int i = 0
              
    for (i = 0; i < len; ++i) 
              { 
                  
    if (this[i] != s[i]) 
                  { 
                      
    break
                  } 
              } 
              
    if (i <= len)
              {
                  
    if (this[i] < s[i])
                  {
                      
    return -1;
                  }
                  
    else if (this[i] > s[i])
                  {
                      
    return 1;
                  }
              }
              
    else if (this.GetLength() == s.GetLength())
              {
                  
    return 0;
              }
              
    else if (this.GetLength() < s.GetLength())
              {
                  
    return -1;
              }

              
    return 1;
           } 
           
    //求子串 
           public StringDS SubString(int index, int len) 
           { 
                
    if ((index<0|| (index>this.GetLength()-1|| (len<0|| (len>this.GetLength()-index)) 
                { 
                    Console.WriteLine(
    "Position or Length is error!"); 
                    
    return null
                } 

                StringDS s 
    = new StringDS(len); 

                
    for (int i = 0; i < len; ++i) 
                { 
                    s[i] 
    = this[i + index-1]; 
                } 

                
    return s; 
           } 
           
    //串连接 
           public StringDS Concat(StringDS s)
           {
               StringDS s1 
    = new StringDS(this.GetLength() +s.GetLength());
               
    for (int i = 0; i < this.GetLength(); ++i)
               {
                   s1.data[i] 
    = this[i];
               }

               
    for (int j = 0; j < s.GetLength(); ++j)
               {
                   s1.data[
    this.GetLength() + j] = s[j];
               }

               
    return s1;
           } 
           
    //串插入 
           public StringDS Insert(int index, StringDS s) 
             { 
               
    int len = s.GetLength(); 
               
    int len2 = len + this.GetLength(); 
               StringDS s1 
    = new StringDS(len2); 
               
    if (index < 0 || index > this.GetLength() - 1
               { 
                   Console.WriteLine(
    "Position is error!"); 
                   
    return null
               } 
               
    for (int i = 0; i < index; ++i) 
               { 
                   s1[i] 
    = this[i]; 
               } 
               
    for(int i = index; i < index + len ; ++i) 
               { 
                   s1[i] 
    = s[i - index]; 
               } 
               
    for (int i = index + len; i < len2; ++i) 
               { 
                   s1[i] 
    = this[i - len]; 
               }
               
    return s1;
             }
           
    //串删除 
           public StringDS Delete(int index, int len)
             {
                 
    if ((index < 0|| (index > this.GetLength() - 1)
                     
    || (len < 0|| (len > this.GetLength() - index))
                 {
                     Console.WriteLine(
    "Position or Length is error!");
                     
    return null;
                 }

                 StringDS s 
    = new StringDS(this.GetLength() - len);

                 
    for (int i = 0; i < index; ++i)
                 {
                     s[i] 
    = this[i];
                 }

                 
    for (int i = index + len; i < this.GetLength(); ++i)
                 {
                     s[i] 
    = this[i];
                 }

                 
    return s;
             } 
           
    //串定位 
           public int Index(StringDS s) 
              { 
                
    if (this.GetLength() < s.GetLength()) 
                { 
                    Console.WriteLine(
    "There is not string s!"); 
                    
    return -1
                } 
     
                
    int i = 0
                
    int len = this.GetLength() - s.GetLength(); 
                
    while (i < len) 
                { 
                    
    if (this.Compare(s) == 0
                    {
                        
    break;
                    }
                }

                
    if (i <= len)
                {
                    
    return i;
                }

                
    return -1;
              } 
        }

    二、数组
         1) 数组是 n(n≥1)个相同数据类型的数据元素的有限序列。
         2) 具有固定格式和数量
         3)每一个数据元素通过唯一的下标来标识和访问
         4)一经定义,每一维的大小及上下界都不能改变,所以,在数组上不能进行插入、删除数据元素等操作
         5) 数组采用顺序存储结构来存储数组中的数据元素
         6) 数组上的操作一般有:
            1、取值操作:给定一组下标,读其对应的数据元素;
            2、赋值操作:给定一组下标,存储或修改与其对应的数据元素;
            3、清空操作:将数组中的所有数据元素清除;
            4、复制操作:将一个数组的数据元素赋给另外一个数组;
            5、排序操作:对数组中的数据元素进行排序,这要求数组中的数据元素是可排序的;
            6、反转操作:反转数组中数据元素的顺序。
    三、C#中数组
         1) C#支持一维数组、多维数组及交错数组。
         2)所有的数组类型都隐含继承自 System.Array。
         3)Array 是一个抽象类,继承自 System.Object,ICloneable, IList, ICollection, IEnumerable,所以数组是引用类型。
         4)C#除了能创建静态数组外,还可以创建动态数组,通过使用 Array 的静态方法 CreateInstance 方法来实现。

    Array
     public class myArray
        {
            
    public void Run()
            {
                
    //静态数组
                string[] arr = new string[5];
                
    for (int i = 0; i < 5; i++)
                {
                    arr[i] 
    = "val"+i;
                }
                
    //动态数组
                Array arr1 = Array.CreateInstance(typeof(string),5);
                
                
    for (int i = 0; i < 5; i++)
                {
                    arr1.SetValue(
    "val" + i, i);
                }
                
    //输出
                Console.WriteLine("-------arr--------");
                
    foreach (string i in arr)
                {
                    Console.WriteLine(i);
                }
                Console.WriteLine(
    "-------arr1--------");
                
    foreach (string i in arr1)
                {
                    Console.WriteLine(i);
                }
                
            }
        }
  • 相关阅读:
    .NET平台系列18 .NET5的超强优势
    .NET平台系列17 .NET5中的ARM64性能
    .NET平台系列19 新世界中的.NET大统一平台架构解析
    .NET平台系列16 .NET5/Asp.Net Core 在全球Web框架权威性能测试 Web Framework Benchmarks 中的吊炸天表现
    .NET平台系列15 .NET5的吊炸天性能改进
    .NET平台系列14 .NET5中的新增功能
    从零开始学Typescript-类型注解
    从零开始学Typescript-第一个TS程序
    从零开始学Typescript-安装Typescript
    从零开始学VUE-创建VUE应用
  • 原文地址:https://www.cnblogs.com/tenghoo/p/Data_Structures_StringandArray.html
Copyright © 2011-2022 走看看