数据结构C语言第三版,邓文华编 习题3答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题3参考答案
3.1.选择题
(1). D (2). C (3). D (4). C (5). B (6). C (7). C (8). C (9). B (10).B (11). D (12). B (13). D (14). C (15). C (16). C (17). D (18). C (19). C (20). B 3.2.填空题
(1)FILO, FIFO
(2)-1, 3 4 X * + 2 Y * 3 / -
(3)stack.top, stack.s[stack.top]=x
(4)p>llink->rlink=p->rlink, p->rlink->llink=p->rlink
(5)(R-F+M)%M
(6)top1+1==top2
(7)F==R
(8)front==rear
(9)front==(rear+1)%n
(10) N-1
3.3 答:一般线性表使用数组来表示的
线性表一般有插入、删除、读取等对于任意元素的操作
而栈只是一种特殊的线性表
栈只能在线性表的一端插入(称为入栈,push)或者读取栈顶元素或者称为“弹出、出栈”(pop)。
3.4 答:相同点:栈和队列都是特殊的线性表,只在端点处进行插入,删除操作。
不同点:栈只在一端(栈顶)进行插入,删除操作;队列在一端(top)删除,一端(rear)插入。
3.5 答:可能序列有14种:ABCD; ACBD; ACDB; ABDC; ADCB; BACD; BADC; BCAD; BCDA; BDCA; CBAD; CBDA; CDBA; DCBA。
3.6 答:不能得到4,3,5,6,1,2,最先出栈的是4,则按321的方式出,不可能得到1在2前的序列,可以得到1,3,5,4,2,6,按如下方式进行push(1), pop(), push(2), push(3), pop(), push(4), push(5), pop(), pop(), pop(), push(6), pop()。
3.7 答:stack
3.8 非递归:
int vonvert (int no,int a[]) //将十进制数转换为2进制存放在a[],并返回位数
{
int r;
SeStack s,*p;
P=&s;
Init_stack(p);
while(no)
{
push(p,no%2);
no/=10;
}
r=0;
while(!empty_stack(p))
{
pop(p,a+r);
r++;
}
return r;
}
递归算法:
void convert(int no)
{
if(no/2>0)
{
Convert(no/2);
Printf(“%d”,no%2);
}
else
printf(“%d”,no);
}
3.9 参考程序:
void view(SeStack s)
{
SeStack *p; //假设栈元素为字符型
char c;
p=&s;
while(!empty_stack(p))
{
c=pop(p);
printf(“%c”,c);
}
printf(”\n”);
}
3.10 答:char
3.11 参考程序:
void out(linkqueue q)
{
int e;
while(q.rear !=q.front )
{
dequeue(q,e);
print(e); //打印
}
}
嘿嘿,感谢吧,标准答案哦