我正在考虑一个解决方案来计算c#中的字符串长度而不使用Length 属性.
我能想到的事情就是这样做
程序在C#中
public static int strlen (string s)
{
string temp = s + '/0';
char [] c = temp.ToCharArray();
int length = 0;
while (c[length]!='/0') length++;
length--;
return length;
}
Run Code Online (Sandbox Code Playgroud)
但这是非常天真的编程,它还使用了1个额外的临时变量你能想到更好的解决方案吗?
我有以下功课问题:
有很多方法可以实现strcmp()函数.
请注意,如果str1按字母顺序排在str2之上,则strcmp(str1,str2)返回负数;如果两者相等,则返回0;如果str2按字母顺序排在str1之上,则返回postiveve.在它中可以用C实现如下:
int mystrcmp(const char *s1, const char *s2)
{
while (*s1==*s2)
{
if(*s1=='\0')
return(0);
s1++;
s2++;
}
return(*s1-*s2);
}
Run Code Online (Sandbox Code Playgroud)
所以现在我想在C#中实现它,而不使用.NET的任何内置方法.我怎么能做到这一点?
我会使用哈希表并使用ISBN号作为密钥.因为这将给我一个O(1)的查找时间....因为在哈希表中查找的平均时间是O(1)....
我们也可以使用二进制搜索树.....查找时间是O(nlogn)...
你会使用什么数据结构?为什么?
我无法实现排序算法(合并)为单个列表定义如下定义我的mergesort方法总是给我null ..我无法弄清楚什么是错误你们可以帮助我吗?
节点类
public class Node
{
private int data;
private Node next;
}
Run Code Online (Sandbox Code Playgroud)
Linked List类
public class SSL
{
private Node head;
}
Run Code Online (Sandbox Code Playgroud)
我的合并排序代码
public static void MergeSort(SSL a)
{
SSL x = new SSL();
SSL y = new SSL();
if (a.Head == null || a.Head.Next == null) // base case if list has 0 or 1 element
return;
AlternateSplitting(a, x, y);
MergeSort(x);
MergeSort(y);
a = SortedMerge(x, y);
}
Run Code Online (Sandbox Code Playgroud)
我实现了以下帮助方法来实现合并排序
AlternateSplitting:此方法将列表拆分为2个列表
public static void AlternateSplitting(SSL src, SSL odd, SSL …Run Code Online (Sandbox Code Playgroud) 我需要知道我的二进制堆代码的大O时间是什么,以及如何改进它?
这是代码:
public static void CreateMaxHeap(int[] a)
{
for (int heapsize = 0; heapsize < a.Length; heapsize++)
{
int n, p;
n = heapsize;
while (n > 0)
{
p = (n - 1) / 2;
if(a[n]>a[p])
Swap(a,n,p);
n = p;
}
}
} // end of create heap
Run Code Online (Sandbox Code Playgroud)