11、编写一个二分查找函数,下界为low,上界为high
递归法:
template<class elemtype>
int BSearch(elemtype a[], elemtype x,int low,int high)
{
int mid;
if (low > high)
return -1;
mid = (low + high)/2;
if (x == a[mid])
{
return mid;
}
if (x < a[mid])
{
return BSearch(a, x, low, mid-1);
}
else
{
return BSearch(a,x, mid+1, high);
}
}
非递归法:
int BSearch(elemtype a[],elemtype key, int n)
{
int low,high,mid;
low = 0;
high = n-1;
while(low < high)
{
mid = (low + high)/2;
if (a[mid] == key)
return mid;
else if(a[mid] < key)
low = mid+1;
else
high = mid-1;
}
return -1;
}
注意:二分查找算法前提是已经排好序的。
12、字符串逆序方法
- 一是原始字符串的头和尾进行交换;
- 二是另外开辟一个字符串空间, 将原始字符串逆序保存到新的字符串末;
13、链表反转(逆序)
//常规方法:
struct Node
{
int data;
struct Node* next;
}
void reverse(Node* &head)
{
if (head == NULL)
return;
Node* pre, *cur, *ne;
pre = head;
cur = head->next;
while(cur)
{
ne = cur->next;
cur->next = pre;
pre = cur;
cur = ne;
}
head->next = NULL;
head = pre;
}
//递归方法:
Node* reverse(Node* head)
{
if (p == NULL || p->next == NULL)
{
return head;
}
Node* newHead = reverse(head->next);
head->next->next = head;
head->next = NULL;
return newHead;
}
14、什么是平衡二叉树?
左右子树都是平衡二叉树, 且左右子树的深度差值的绝对值不大于1.
15、堆栈溢出一般是什么原因造成的?
数组越界访问
16、当申请的内存资源没有及时释放而一直重复申请时,会出现什么情况?
内存泄露,内存被占用会一直增长。
17、写出float x与“零值”比较的语句
if (x > -0.000001 && x<0.000001)
18、Internet采用哪种网络协议?该协议的主要层次结构是什么?
tcp/ip协议
主要层次结构采用5层结构:应用层/传输层/网络层/数据链路层/物理层
应用层协议:telnet,ftp,http
传输层协议:tcp,udp
网络层协议:ip,icmp,igmp
(7层结构:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)
19、IP地址的编码分为哪两部分
IP地址由两部分组成,网络号和主机号。 不过要和“子网掩码”按位与之后才能区别哪些是网络位,哪些是主机位。
20、用户输入M、N值, 从1到N开始循环数数, 每次数到M就输出当前数据, 直到全部输出,写出C程序。
这是约瑟夫方法,可使用循环链表,用取余操作数,也可用数组,下面是c语言的数组程序:
void yuesef(int M,int N)
{
int* p = new int[N];
int s = 0,r = 0;
for(int i=0;i<N;i++)
{
p[i] = 1;
}
for(int i=0;i<N;i++)
{
if (p[i] == 1)
s++;
if (s == M)
{
printf(“%d\n”,i+1);
p[i] = 0;
r++;
s = 0;
}
if (I == N-1 && r != N-1)
{
I = 0;
}
}
}