数算第三章书面作业

2018-10-09  本文已影响0人  细雨沉沙

3.1

top():

int flag=0              //统计队列中元素个数的同时将元素压入a 
while(!A.empty())
{
    flag++;
    T tmp=A.front();
    A.pop_front();
    B.push_back(tmp);
} 
while(flag-1)           //弹出除最后一个之外的元素便得到top() 
{
    T tmp=B.front();
    A.push_back(tmp) 
    B.pop_front();
    flag--;
}
int result=B.front();

时间复杂度为O(n)
pop():

int flag=0              //统计队列中元素个数的同时将元素压入a 
while(!A.empty())
{
    flag++;
    T tmp=A.front();
    A.pop_front();
    B.push_back(tmp);
}
while(flag-1)           //将除了最后一个元素之外的元素都转移给A 
{
    T tmp=B.front();
    A.push_back(tmp) 
    B.pop_front();
    flag--;
}
B.pop();//弹出最后一个元素实现pop()

时间复杂度为O(n)
push():

A.push_back(T x)

时间复杂度为O(1);
empty()

A.empty();

时间复杂度为O(1);

3.2

设F(n)为n个数出栈的序列个数,假设最后出栈的元素为k(k<=n),那么比k小的k-1个元素先于k出栈,此种情况有F(k-1)个,比k大的元素先于k出栈的情况有F(n-k)个(F(0)=1),由于这两中情况互不干扰,所以可以相乘,既有F(n)=
f(0)f(n-1)+f(1)f(n-2)+……+f(n-1)f(0)=C(2n,n)/n+1;

3.3

最外层循环while最多循环n次,内部循环最多2n次,故时间复杂度为O(n^2)

上一篇下一篇

猜你喜欢

热点阅读