趋势科技笔试题
1、下面程序的輸出是多少?
void GetMemory(char *p) {p = (char *)malloc(11); }int main(void) {char *str = "Hello";GetMemory(str);strcpy(str,"Hello World");printf("%s",str);return 0; }A、Hello????????????????????? B、Hello World??????????? C、Hello Worl?????????????? D、Run time error/Core dump
2、下面哪個會使這段程序編譯錯誤?
class A { public:A(){} }; class B:public A { public:B(){} }; A *pb = new B(); B b;A、? A *pa = dynamic_cast<A *>(pb);
B、 A *pa = static_cast<A *>(pb);
C、 A a = static_cast<A >(b);
D、 A a = dynamic_cast<A >(b);
E、None of above
dynamic_cast 的目標類型無效。
3、下面程序執行的結果是(D)
A、a???????????? B、b???????????????? C、c??????????????????? D、編譯錯誤
s指針是數組的首地址
4、下面程序執行的結果是(D)
int main(void) {char matrix[3][3]={{'a','b','c'},{'d','e','f'},{'g','h','i'}};printf("%c",matrix[1][4]);return 0; }A、c???????????????????? B、f??????????????????????? C、g??????????????????????????????? D、h
二、算法題
1、如何用兩個棧來實現一個隊列,并分析有關隊列操作的運行時間。
解法:
1、有兩個棧s1和s2,先往s1內插入a,b,c,這做的都是enqueue操作。
2、現在要做dequeue操作,即要得到a,這時可以將s1中的元素全部彈出并存入s2中,這時s2中元素的順序(從底部到頂部)為c,b,a,這時做s2.pop()操作即可得到a。
3、如果繼續做enqueue操作,比如插入d,f,則把d,f插入到s1中,
4、此時若要做dequeue操作,則直接彈出s2中的b,它是目前為止,呆得時間最長的元素
5、若繼續做dequeue操作,則s2彈出c,
6、若繼續做dequeue操作,則s2為空,此時做步驟2的操作,
7、以此類推,就實現了用兩個棧來實現一個隊列的目的。
插入操作的時間為O(1),刪除操作的時間<=O(n),即小于線性時間,有時可能為O(1)。
2、如何用兩個隊列實現一個棧,并分析有關棧操作的運行時間。
解法:
1、有兩個隊列q1和q2,先往q1內插入a,b,c,這做的都是棧的push操作。
2、現在要做pop操作,即要得到c,這時可以將q1中的a,b兩個元素全部dequeue并存入q2中,這時q2中元素為a,b,對q1再做一次dequeue操作即可得到c。
3、如果繼續做push操作,比如插入d,f,則把d,f插入到q2中,
4、此時若要做pop操作,則做步驟2
5、以此類推,就實現了用兩個隊列來實現一個棧的目的。
注意在此過程中,新push進來的元素總是插入到非空隊列中,空隊列則用來保存pop操作之后的那些元素,那么此時空隊列不為空了,原來的非空隊列變為空了,總是這樣循環。
對于push和pop操作,其時間為O(n)。
總結
- 上一篇: 猴子分桃问题
- 下一篇: 浙商银行2011.11.26校园招聘会笔