一、
1、设计一个栈的结构,要求实现一个min函数,返回栈中最小的元素。要求min、push和pop操作都必须是O(1)的时间复杂度,简单描述思想。
2.、(1)输出下面程序的前7行并且说明数列表示的含义
(2)下面的程序是否存在安全隐患?原因是?
#include<stdio.h>
#include<string.h>
const int MAX = 128;
const int LEN = 20;
int main(){
char str[MAX]="1";
char tem_str[MAX]="";
char buf[MAX]="";
printf("%s/n",str);
int i;
for(int line=1;line<=LEN;line++){
strcpy(tem_str,str);
str[0]='/0';
for(i=0;tem_str[i]!=0;++i){
char ch=tem_str[i];
int count = 1;
for(;tem_str[i+1]==tem_str[i];++i)
count++;
sprintf(buf,"%d%c",count,ch);
strcat(str,buf);
}
printf("%s/n",str);
}
return 0;
}
3、分析线性表、二叉平衡树和哈希表在存储数据的时候,各有什么优劣?
二、
1、有一串首尾相连的珠子,共有m个,每一个珠子有一种颜色,并且颜色的总数不超过n(n<=10),求连续的珠子的颜色总数为n时,长度最小的区间。可简述思路或者给出伪代码,并且给出时间和空间复杂度分析。
2、实现函数strnumcmp,和strcmp类式,不过有一点区别是在字符串包含数字的地方,按照数字的大小进行排序。比如
abc<abc#<abc1<abc2<abc10<abcd
而正常的顺序为
abc<abc#<abc1<abc10<abc2<abcd
请实现strnumcmp,给出完整代码。要求简单、明确。
三、
大规模的字典中,需要词与此中间的搭配关系。
(1) 字典中的项为辞与词之间的搭配,比如两个词“今天”和“晚上”有两个搭配,今天|晚上 和晚上|今天。
(2) 字典的规模为10W数量级。
(3) 每一个词,最多能和其他1W左右的词进行搭配。
(4) 这个系统中有大量的读操作,大约每秒1000次,但是很少有写操作。
设计一个字典服务系统,能够满足上述的要求,并且给出占用的资源,最后估算出需要的机器资源。