数据结构与算法学习系列第二天
一个问题的解决办法有很多种,所以小编写的算法可能您没有见过或者还有很多欠缺的地方,因为我没看过别人写的算法。现在凭借自己的理解
基础上实现的问题解法。不妥之处多多指教。
问题1:线性表之字符串的删除操作,如字符串A=“abcdef”,删除第二个元素b,得到新的字符串acdef
思路:得到要删除的位置,创建一个新的字符串B,遍历所有元素,判断如果位置为删除的编号,则不加入到B中
图解:
C#代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace _5线性表之数组删除操作 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 Console.WriteLine("请输入要删除的字符串"); 13 string strA = Console.ReadLine(); 14 Console.WriteLine("请输入要删除的位置"); 15 int index = int.Parse(Console.ReadLine()); 16 string strOutput=DelectString(index-1, strA); 17 Console.WriteLine(strOutput); 18 Console.ReadKey(); 19 } 20 public static string DelectString(int index, string strA) 21 { 22 char[] charA = strA.ToCharArray(); 23 StringBuilder sb = new StringBuilder(); 24 int lengthA=charA.Length; 25 for (int i = 0; i < lengthA; i++) 26 { 27 if (i < index) 28 { 29 sb.Append(charA[i]); 30 } 31 if (i > index) 32 { 33 sb.Append(charA[i]); 34 } 35 } 36 return sb.ToString(); 37 } 38 } 39 }
题目2:已知字符串strA="3,5,8,11,21",字符串strB="2,6,8,9,15,20" 要求输出一个字符串按递增顺序排列。如2,3,5,6,8,11,15,20,25,
我的思路:首先将两个字符串Split得到两个char数组,charA,charB,以第一个charA为标准,取出第一个元素,遍历charB中的元素,判断:如果charB中存在比第一个元素还小的,则将其排在前头,再取出charA第二个元素依次遍历。
图解:
C#实现代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace _3线性表之两个集合的递增排序 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 string strA = "3,5,8,11,21";//此算法有个缺陷就是做比较的strA必须有最大值否则strB中的比strA中大的数输出不来 13 string strB = "2,6,8,9,15,20"; 14 Console.WriteLine(strA+"\n"+strB); 15 string newStr = rankByIncrease(strA,strB); 16 Console.WriteLine(newStr); 17 Console.ReadKey(); 18 } 19 protected static string rankByIncrease(string A, string B) 20 { 21 StringBuilder sb = new StringBuilder(); 22 string[] str_A = A.Split(','); 23 string[] str_B = B.Split(','); 24 int lengthA = str_A.Length; 25 int lengthB = str_B.Length; 26 try 27 { 28 for (int i = 0; i < lengthA; i++) 29 { 30 for (int j = 0; j < lengthB; j++) 31 { 32 int numberA = int.Parse(str_A[i]);//得到strA中的每一个元素并转换为int类型 33 int numberB = int.Parse(str_B[j]);//得到strB中的每一个元素并转换为int类型 34 if (numberA > numberB) 35 { 36 if (!sb.ToString().Contains(numberB.ToString())) 37 { 38 sb.Append(numberB.ToString()+","); 39 } 40 } 41 } 42 sb.Append(str_A[i]+","); 43 } 44 45 } 46 catch (Exception ex) 47 { 48 49 Console.WriteLine(ex.Message); 50 } 51 return sb.ToString(); 52 } 53 } 54 }