数据结构与算法学习系列第二天

一个问题的解决办法有很多种,所以小编写的算法可能您没有见过或者还有很多欠缺的地方,因为我没看过别人写的算法。现在凭借自己的理解

基础上实现的问题解法。不妥之处多多指教。

问题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 }

 

 

posted @ 2013-04-04 19:38  罗导  阅读(158)  评论(0编辑  收藏  举报