第一范文网 - 专业文章范例文档资料分享平台

第3章习题答案

来源:用户分享 时间:2025/7/4 12:25:19 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第3章 栈与队列

}

}//F_nonrecursive

11.试将下列递归函数改为非递归函数。 void test(int &sum){ int x;

scanf(\ if(x==0)sum=0;

else{test(sum);sum+=x;} printf(\} 解: void test(){

int x,sum=0,top=-1,s[10]; scanf(\

while(x!=0){s[++top]=x; scanf(\ printf(\

while(top>-1){sum+=s[top--]; printf(\};

12.设整数列p1,p2,…,pn,给出求解最大值的递归程序。 解:

int MaxValue(int a[],int n){ int max;

if(n==1)max=a[0];

else if(a[n-1]>MaxValue(a,n-1))max=a[n-1]; else max=MaxValue(a,n-1); return max; }

13.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队和出队的算法。

解:

5

while(!StackEmpty(T)){

Pop(T,t); s*=t.a;

}//while

第3章 栈与队列

(1)

void InitQueue(CirLinkList &rear){ rear=new LNode; rear->next=rear; } (2)

void EnQueue(CirLinkList &rear, ElemType x){ LNode *s; s=new LNode; s->data=x;

s->next=rear->next; rear->next=s; rear=s; } (3)

void DnQueue(CirLinkList &rear,ElemType &x){ LNode *s;

if(rear->next==rear){printf(\队空\\n\ s=rear->next->next;//s指向队头元素 rear->next->next=s->next;//队头元素出队 x=s->data;

if(s==rear)rear=rear->next;//空队 delete s; }

14.假设称正读和反读都相同的字符序列为“回文”,试写一个算法判别读入的一个亿@为结束符的字符序列是否是“回文”。

解:

int Test(){//判别输入的字符串是否回文序列,是则返回1,否则返回0 SqStack S; SqQueue Q; char c; ElemType a,b;

InitStack(S);InitQueue(Q); while((c=getchar())!='@'){

6

第3章 栈与队列

}

while(!StackEmpty(S)){ }

return OK; }

15.写一算法,借助于栈将一个单链表逆序输出。 解:

void process(LinkList &L){ LNode *p; SqStack s; ElemType x; p=L->next; InitStack(s);

while (p){Push(s,p->data);p=p->next;}

while (!StackEmpty(s)){Pop(s,x);printf(\}

16.假设循环队列中只设rear和length来分别指示队尾元素的位置和队中元素的个数,试给出此循环队列的队满条件,并写出相应的入队和出队算法,要求出队时需返回队头元素。

解:

typedef struct {

ElemType *base;//动态分配存储空间 int length;//队列长度

int rear;//尾指针,指向队列尾元素 }SqQueue;

int EnQueue(SqQueue &Q,ElemType x){ //带length域的循环队列入队算法 if(Q.length==MAX)return ERROR;//队列满 Q.rear=(Q.rear+1)%MAX; Q.base[Q.rear]=x; Q.length++; return OK;

7

Push(S,c);EnQueue(Q,c); //同时使用栈和队列两种结构

Pop(S,a); DeQueue(Q,b);

if(a!=b) return ERROR;

第3章 栈与队列

}

int DeQueue(SqQueue &Q,ElemType &x){ //带length域的循环队列出队算法 int head;

if(Q.length==0)return ERROR;//队列空 head=(Q.rear-Q.length+1)%MAX; x=Q.base[head]; Q.length--; return OK; }

int InitQueue(SqQueue &Q){//构造一个空循环队列Q Q.base=new ElemType[MAX]; if(!Q.base)exit(OVERFLOW); Q.rear=0; Q.length=0; return OK; }

8

搜索更多关于: 第3章习题答案 的文档
第3章习题答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c46l9p59e54862m61dlbv_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top