收藏 分享(赏)

部分广工数据结构anyview答案.doc

上传人:tkhy51908 文档编号:8236236 上传时间:2019-06-15 格式:DOC 页数:21 大小:125KB
下载 相关 举报
部分广工数据结构anyview答案.doc_第1页
第1页 / 共21页
部分广工数据结构anyview答案.doc_第2页
第2页 / 共21页
部分广工数据结构anyview答案.doc_第3页
第3页 / 共21页
部分广工数据结构anyview答案.doc_第4页
第4页 / 共21页
部分广工数据结构anyview答案.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、1、 【题目】已知 k 阶裴波那契序列的定义为f(0)=0, f(1)=0, ., f(k-2)=0, f(k-1)=1;f(n)=f(n-1)+f(n-2)+.+f(n-k), n=k,k+1,.试编写求 k 阶裴波那契序列的第 m 项值的函数算法,k 和 m 均以值调用的形式在函数参数表中出现。*/Status Fibonacci(int k, int m, int if(k=0)p-next=NULL;else return NULL;return p;5、链表的结点和指针类型定义如下typedef struct LNode ElemType data;struct LNode *nex

2、t; LNode, *LinkList;试写一函数,构建长度为 2 且两个结点的值依次为 x 和 y 的链表。*/LinkList CreateLinkList(ElemType x, ElemType y) /* 构建其两个结点的值依次为 x 和 y 的链表。*/* 若构建失败,则返回 NULL。 */LNode *p,*q;p=(LNode*)malloc(sizeof(LNode);q=(LNode*)malloc(sizeof(LNode);if(pq-data=y;p-next=q;q-next=NULL;else return NULL;return p;6、链表的结点和指针类型定

3、义如下typedef struct LNode ElemType data;struct LNode *next; LNode, *LinkList;试写一函数,构建长度为 2 的升序链表,两个结点的值分别为 x 和 y,但应小的在前,大的在后。*/LinkList CreateOrdLList(ElemType x, ElemType y)/* 构建长度为 2 的升序链表。 */* 若构建失败,则返回 NULL。 */LNode *p,*q;p=(LNode*)malloc(sizeof(LNode);q=(LNode*)malloc(sizeof(LNode);int a;if(xy) a

4、=x;x=y;y=a;if(pq-data=y;p-next=q;q-next=NULL;else return NULL;return p;7、若顺序栈的类型重新定义如下。试编写算法,实现顺序栈的入栈操作。typedef struct ElemType *elem; / 存储空间的基址ElemType *top; / 栈顶元素的下一个位置int size; / 当前分配的存储容量int increment; / 扩容时,增加的存储容量 SqStack2;*/Status Push_Sq2(SqStack2 if(S.top=return l;10、如果希望循环队列中的元素都能得到利用,则可设

5、置一个标志域 tag,并以 tag 值为 0 或 1 来区分尾指针和头指针值相同时的队列状态是“空“ 还是“满“。试编写与此结构相应的入队列和出队列的算法。本题的循环队列 CTagQueue 的类型定义如下:typedef struct ElemType elemMAXQSIZE;int tag;int front;int rear; CTagQueue;*/Status EnCQueue(CTagQueue Q.elemQ.rear=x;Q.rear=(Q.rear+1)%MAXQSIZE;return OK;Status DeCQueue(CTagQueue x=Q.elemQ.front

6、;Q.front=(Q.front+1)%MAXQSIZE;return OK;11、假设将循环队列定义为:以域变量 rear和 length 分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素) 。本题的循环队列 CLenQueue 的类型定义如下:typedef struct ElemType elemMAXQSIZE;int length;int rear; CLenQueue;*/Status EnCQueue(CLenQueue if(Q.length!=0)front=(MAXQSIZE+Q

7、.rear+1-Q.length)%MAXQSIZE;if(Q.rear+1)%MAXQSIZE=front) return ERROR;Q.elem+Q.rear=x; if(Q.length=0) Q.elem0=x; Q.rear=0;Q.length+;return OK;Status DeCQueue(CLenQueue if(Q.length=0) return ERROR;front=(MAXQSIZE+Q.rear+1-Q.length)%MAXQSIZE;x=Q.elemfront;Q.length-;return OK;12、已知 k 阶斐波那契序列的定义为:f0=0, f

8、1=0, , fk-2=0, fk-1=1;fn=fn-1+fn-2+fn-k, n=k,k+1,试利用循环队列编写求 k 阶斐波那契序列中第n+1 项 fn 的算法。本题的循环队列的类型定义如下:typedef struct ElemType *base; / 存储空间的基址int front; / 队头位标int rear; / 队尾位标,指示队尾元素的下一位置int maxSize; / 最大长度 SqQueue;*/long Fib(int k, int n)/* 求 k 阶斐波那契序列的第 n+1 项 fn */int i,s,j;long f;SqQueue Q;Q.base=(E

9、lemType*)malloc(n+1)*sizeof(ElemType);Q.maxSize=n+1; Q.front=Q.rear=0;if(k=0)ii-k;j-)s+=Q.basej-1; Q.basei=s; f=Q.basen; return f;13、设 A=(a1,am)和 B=(b1,bn)均为有序顺序表,A和 B分别为 A 和 B 中除去最大共同前缀后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大的共同前缀为(x,y,y,z), 在两表中除去最大共同前缀后的子表分别为 A=(x,z)和 B=(y,x,x,z)) 。若 A=

10、B=空表,则 A=B;若 A=空表,而 B 空表,或者两者均不为空表,且 A的首元小于 B的首元,则 AB。试写一个比较 A 和 B 大小的算法。 (注意:在算法中,不要破坏原表 A和 B,也不一定先求得 A和 B才进行比较) 。顺序表类型定义如下:typedef struct ElemType *elem;int length;int size;int increment; SqList;*/char Compare(SqList A, SqList B)/* 比较顺序表 A 和 B, */* 返回, 若 AB */int i;if(A.elem0=0)if(A.elemA.length-1

11、-B.elemB.length-1=0) return =;if(A.elem0!=0)(A.elemi!=0)|(B.elemi!=0);i+)if(A.elemi-B.elemi=0) continue;if(A.elemi-B.elemi0) return;if(A.elemi-B.elemi;14、试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,an)逆置为(an,an-1, ,a1)。顺序表类型定义如下:typedef struct ElemType *elem;int length;int size;int increment; SqList;*/voi

12、d Inverse(SqList if(L.length!=0)for(i=0;idata=0) return TRUE;else return FALSE;18、试写一算法,实现链栈的取栈顶元素操作。链栈的类型定义为:typedef struct LSNode ElemType data; / 数据域struct LSNode *next; / 指针域 LSNode, *LStack; / 结点和链栈类型*/Status GetTop_L(LStack S, ElemType */* 若 S 是空栈,则失败,返回 ERROR。 */if(S-data=0) return ERROR;e=S-

13、data;return OK;19、试写一算法,实现链队列的判空操作。链队列的类型定义为:typedef struct LQNode ElemType data; struct LQNode *next; LQNode, *QueuePtr; / 结点和结点指针类型typedef struct QueuePtr front; / 队头指针QueuePtr rear; / 队尾指针 LQueue; / 链队列类型*/Status QueueEmpty_LQ(LQueue Q)/* 判定链队列 Q 是否为空队列。 */* 若 Q 是空队列,则返回 TRUE,否则 FALSE。*/if(Q.fron

14、t=0) return TRUE;else return FALSE;20、试写一算法,实现链队列的求队列长度操作。链队列的类型定义为:typedef struct LQNode ElemType data; struct LQNode *next; LQNode, *QueuePtr; / 结点和结点指针类型typedef struct QueuePtr front; / 队头指针QueuePtr rear; / 队尾指针 LQueue; / 链队列类型*/int QueueLength_LQ(LQueue Q)/* 求链队列 Q 的长度并返回其值 */int i=0;if(Q.front=

15、0) return 0;while(Q.front-data!=0)i+;Q.front=Q.front-next;return i;21、假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针) ,试编写相应的队列初始化、入队列和出队列的算法。带头结点循环链队列 CLQueue 的类型定义为:typedef struct LQNode ElemType data;struct LQNode *next; LQNode, *CLQueue;*/Status InitCLQueue(CLQueue rear-next=rear;return OK;Status EnC

16、LQueue(CLQueue s=(LQNode*)malloc(sizeof(LQNode);if(rear-next=rear)rear-next=s;s-next=rear;rear=s;return OK;s-data=x;s-next=rear-next;rear-next=s;rear=s;return OK;Status DeCLQueue(CLQueue LQNode *A;A=(LQNode*)malloc(sizeof(LQNode);A=rear-next; A-next=A-next-next;return OK;else return 0;22、试写一算法,实现带头结

17、点单链表的判空操作。单链表的类型定义为:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList; / 结点和结点指针类型*/Status ListEmpty_L(LinkList L)/* 判定带头结点单链表 L 是否为空链表。 */* 若 L 是空链表,则返回 TRUE,否则 FALSE。*/if(L-next=null) return TRUE;else return FALSE;23、试写一算法,实现带头结点单链表的销毁操作。单链表的类型定义为:typedef struct LNode ElemTy

18、pe data; struct LNode *next; LNode, *LinkList; / 结点和结点指针类型*/Status DestroyList_L(LinkList L-next=null;return OK;24、试写一算法,实现带头结点单链表的清空操作。单链表的类型定义为:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList; / 结点和结点指针类型*/Status ClearList_L(LinkList L-next=null;return OK;25、试写一算法,实现带头结点单链

19、表的求表长度操作。单链表的类型定义为:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList; / 结点和结点指针类型*/int ListLength_L(LinkList L)/* 求带头结点单链表 L 的长度,并返回长度值。*/* 若 L 不是带头结点单链表,则返回-1 。 */int l=0;if(L-data!=0|L=null) return -1;while(L-next!=0)l+;L=L-next;return l;26、试写一算法,在带头结点单链表 L 插入第 i 元素 e。带头结点单链

20、表的类型定义为:typedef struct LNode ElemType data;struct LNode *next; LNode, *LinkList;*/Status Insert_L(LinkList L, int i, ElemType e)/* 在带头结点单链表 L 插入第 i 元素 e,并返回 OK。*/* 若参数不合理,则返回 ERROR。 */int j;LNode *s;s=(LNode*)malloc(sizeof(LNode);if(null!=s) s-data=e;if(inext=null)for(j=1;jnext;if(L=null) return ERR

21、OR;s-next=L-next;L-next=s;return OK;27、试写一算法,在带头结点单链表删除第 i 元素到 e。带头结点单链表的类型定义为:typedef struct LNode ElemType data;struct LNode *next; LNode, *LinkList;*/Status Delete_L(LinkList L, int i, ElemType if(inext=null) return ERROR;for(j=1;jnext;if(L-next=null) return ERROR;e=L-next-data;L-next=L-next-next

22、;return OK;28、试写一算法,在带头结点单链表的第 i 元素起的所有元素从链表移除,并构成一个带头结点的新链表。带头结点单链表的类型定义为:typedef struct LNode ElemType data;struct LNode *next; LNode, *LinkList;*/Status Split_L(LinkList L, LinkList int k=0;Li=(LNode*)malloc(sizeof(LNode);if(L-next=null)|(i=0) Li=null;return ERROR;LNode *A;LNode *B;A=(LNode*)mall

23、oc(sizeof(LNode);B=(LNode*)malloc(sizeof(LNode);A=L;while(A-next!=null) A=A-next;k+; if(knext;j+;D=Li;while(B!=null)D-next=B;D=B;B=B-next;C-next=null;return OK;29、试写一算法,在带头结点单链表删除第 i 元素起的所有元素。带头结点单链表的类型定义为:typedef struct LNode ElemType data;struct LNode *next; LNode, *LinkList;*/Status Cut_L(LinkLis

24、t L, int i)/* 在带头结点单链表 L 删除第 i 元素起的所有元素,并返回 OK。*/* 若参数不合理,则返回 ERROR。 */int j=0;int k=0;if(L-next=null)|(i=0) return ERROR;LNode *A;LNode *B;A=(LNode*)malloc(sizeof(LNode);B=(LNode*)malloc(sizeof(LNode);A=L;while(A-next!=null) A=A-next;k+; if(knext;j+;C-next=null;return OK;30、试写一算法,删除带头结点单链表中所有值为 x 的

25、元素,并释放被删结点空间。单链表类型定义如下:typedef struct LNode ElemType data;struct LNode *next; LNode, *LinkList;*/Status DeleteX_L(LinkList L, ElemType x)/* 删除带头结点单链表 L 中所有值为 x 的元素, */* 并释放被删结点空间,返回实际删除的元素个数。 */int i=0;if(L-next=null) return 0;LNode *A;A=(LNode*)malloc(sizeof(LNode);A=L;L=L-next;while(L!=NULL)if(L-d

26、ata=x) i+;while(A-next!=L)A=A-next;A-next=L-next;L=L-next;return i;31、试写一算法,删除带头结点单链表中所有值小于 x 的元素,并释放被删结点空间。单链表类型定义如下:typedef struct LNode ElemType data;struct LNode *next; LNode, *LinkList;*/Status DeleteSome_L(LinkList L, ElemType x)/* 删除带头结点单链表 L 中所有值小于 x 的元素, */* 并释放被删结点空间,返回实际删除的元素个数。 */int i=0;if(L-next=null) return 0;LNode *A;A=(LNode*)malloc(sizeof(LNode);A=L;L=L-next;while(L!=NULL)if(L-datanext!=L)A=A-next;A-next=L-next;L=L-next;return i;32、

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报