2021-11-14

数据结构作业纠错
1.(单选题,2 分)
在求算术表达式的过程中,需要引用两个栈,一个是在算术表达式转换成后缀表达式过程中用来存放( )的栈,另一个是在后缀表达式求值过程中用来存放( )的栈。
A.操作数,运算符
B.运算符,运算符
C.运算符,操作数
D.操作数,操作数
教师批阅
正确答案C, 我的答案 :A

3.(单选题,2 分)
将算法表达式a/b+(cd-ef)/g转换为等价的后缀表达式是( )。
A.ab/+cd*-efg/
B.ab/+(cd
-ef*)g/
C.abcdefg/+**/
D.ab/cdef-g/+
教师批阅
正确答案D, 我的答案 :A

12.(单选题,2 分)
设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是( )。
A.O(n×m)
B.O(m)
C.O(n+m)
D.O(n)
教师批阅
正确答案C, 我的答案 :B

4.(单选题,2 分)
最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是( )。
A.(rear+1)%nfront
B.(rear-l)%n
front
C.rear+1front
D.rear
front
教师批阅
正确答案D, 我的答案 :B 得0分
答案解析:
最大容量为n的循环队列,队满条件是(rear+1)%nfront,队空条件是rearfront。

6.(单选题,2 分)
若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[0…(n(n+1))/2]中,则在B中确定aij()的位置k的关系为( )。
A.i*(i-1)/2+j-1
B.j*(j-1)/2+i-1
C.j*(j+1)/2+i
D.i*(i+1)/2+j
教师批阅
正确答案A, 得2分

23.(单选题,2 分)
在链栈S(S为栈顶指针)中插入一个指针p所指的新结点,其修改链的语句序列是( )。

A.p->next=S->next; S->next = p;
B.S->next = p;p->next=S;
C.p->next = S;S->next=p;
D.p->next = S;S=p;
教师批阅
正确答案D, 我的答案 :A 得0分
答案解析:

25.(单选题,2 分)
数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为( )。
A.n+r-f
B.(n+f-r)%n
C.r-f
D.(n+r-f)%n
教师批阅
正确答案D, 我的答案 :C 得0分
答案解析:
对于非循环队列,尾指针和头指针的差值便是队列的长度,而对于循环队列,差值可能为负数,所以需要将差值加上MAXSIZE(本题为n),然后与MAXSIZE(本题为n)求余,即(n+r-f)%n。

26.(填空题, 2 分)
在表长为n的顺序表中查找值为x的数据元素时,查找成功时需与元素比较的平均次数是___ 。
n
教师批阅
得0分
正确答案:
(1) (n+1)/2
答案解析:

模式的next 函数值仅取决于模式本身,而与主串无关。
A. 对
B. 错

教师批阅
正确答案 对,

编写算法:status Insert(SqList &L,int x),实现在非递减有序顺序表L中插入一个值为x的新元素,并使顺序表L仍然保持有序。
//顺序表的类型描述如下:
typedef struct {
ElemType *elem;
int length;
int listsize;
}SqList;
正确答案:
{【参考答案一】//将x插入非递减有序表L中(方法一)
status Insert(SqList &L, ElemType x){
if(L.length>=L…listsize) //分配空间满时,则退出
return ERROR;
for(i=0; i<L.length && L.elem[i]<x;i++); //确定插入位置
for(j=L.length-1;j>=i; i–) //将第i个元素及其之后的所有元素后移一位
L.elem[i+1]=L.elem[i];
L.elem[i]=x; //插入x
L.length++; //表长加1
return OK;
}
【参考答案二】//将x插入非递减有序表L中(方法二)
status Insert(SqList &L, ElemType x){ //分配空间满时,则退出
if(L.length>=L.listsize)
return ERROR;
for(i=L.length-1; i>=0 && L.elem[i]>x;i–)
L.elem[i+1]=L.elem[i]; //一边比较,一边进行后移
L.elem[i+1]=x; //插入x
L.length++; //表长加1
return OK;
}
}

37.(简答题, 15 分)
设计一个算法,通过一趟遍历在单链表中确定值最大的结点。

正确答案:
答案:

假定第一个结点中数据具有最大值,依次与下一个元素比较,若其小于下一个元素,则设其下一个元素为最大值,反复进行比较,直到遍历完该链表。

[算法描述]

ElemType Max (LinkList L ){

if(L->next==NULL) return NULL;

pmax=L->next; //假定第一个结点中数据具有最大值

p=L->next->next;

while(p != NULL ){//如果下一个结点存在

if(p->data > pmax->data) pmax=p;//如果p的值大于pmax的值,则重新赋值

p=p->next;//遍历链表

}

return pmax->data;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_55300220

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值