习题答案
第1章 绪论
1.填空题
(1) 线性结构、树型结构和图型结构
(2) 一对一、一对多和多对多
(3) 效率,人对算法阅读理解的难易程度,对于非法的输入数据,算法能给出相应的响应,而不是产生不可预料的后果
(4) 时间复杂度
2.选择题
(1) C (2) C
3.简答题
程序1
答案:n-1,O(n)
程序2
答案: n-1 O(n)
程序3
答案: 11* n+1, O(n)(n为初始值100)
程序4
答案: , O()
第2章
1.填空题
(1)顺序存储和链式存储(2) addr+m*i(3)n-i+1
(4) 1<=i
2.选择题
(1) B
(2) A C
(3) B
第3章
1.填空题
(1) 1,2,4
(2)push,pop,push,push,pop,push,pop,pop
(3) 栈空;栈满。
(4) s.top -- ; s.top ++ 。
(5) 队尾 , 队头 。
(6) q.front==q.rear , q.front==(q.rear+1)%MaxSize 。
(7) 21 。
2.选择题
D C A B A D C C
3.
(1)算法设计题基本操作如下:
进队
void AddQueue(CirQueue* q, int r, int f, int x)
{
Push(q,f,r,x,2)
}
出队
Void RemoveQueue(CirQueue* q, int r, int f)
{
Pop(q,f,r,1)
}
将x下推进栈i(i=1,2)
Void Push(stack * s, int t1, int t2,int x,int i)
{
if (t2+1) mod n == t1
printf(“栈满”)
else
{
if (i==1)
{a[t1]=x?;
t1=(t1-1)mod n?;
}
else
{
t2=(t2+1)mod n?;
a[t2]=x?;
}
}
}
将栈i(i=1,2)的栈顶元素上托出栈
Void Pop (stack * s, int t1, int t2,int i)
{
if (t1==t2)
printf(“栈空”)
else
{
if (i==1)
{
t1=(t1+1)mod n?;
}
else
{
t2=(t211)mod n?;
}
}
}
(2)约瑟夫环
//约瑟夫环
public void YueSeFu(int n,int k,int m) {
int i;
for(i=1;i<=n;i++)
AddQueue(q,i);//q为定义的顺序队列
//前k个元素先出队再入队
for(i=1;i
Object x=DelQueue(q);//出队
AddQueue(q,x);//入队
}
printf("出队序列:\n");
while(!notEmpty()){
for(i=1;i
Object x= DelQueue(q);
AddQueue(q,x);}
//第m个出队并打印
Object x= DelQueue(q);
printf(“%d ”,x);
}
}
第4章
1.填空题
(1) 两个串的长度相等 和 对应位置的字符相等 。
(2) 含有n个字符的有限序列n>=0 。
(3) 不含任何字符的串 。
(4) 仅含空格字符的字符串 。
(5) 固定长度 , 设置长度指针 。
2. 选择题
(BBD)
3. 简答题
(1)解答:不含任何字符的串称为空串,其串长度为零;仅含有空格字符的串称为空格串,它的长度为串中空格符的个数。
空格符在字符串中可用来分隔一般的字符,便于阅读和识别,但空格符会占用有效串长。
空串在处理过程中可用于作为任意字符串的子串。
(2)
解答:
StrLength(s)=14,
StrLength(t)=4,
SubString(s,7,7)= ’STUDENT’,
SubString(t