




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1-6/*【题目】试写一算法,如果三个整数a,b和c的值不是依次非递增的,则通过交换,令其为非递增。*/void Descend(int &a, int &b, int &c)/* 通过交换,令 a = b = c */ if(a b) a = a b; b = a b; a = a b; if(b c) b = b c; c = b c; b = b c; if(a b) a = a b; b = a b; a = a b; 1-8/*【题目】试编写算法求一元多项式 P(x) = a0 + a1x + a2x2 + . + anxn的值P(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度。*/float Polynomial(int n, int a, float x)/* 求一元多项式的值P(x)。 */* 数组a的元素ai为i次项的系数,i=0,.,n */ float p = a0; float temp = 1; for(int i = 0; i n; +i) temp *=x; p += ai+1 * temp; return p;1-11/*【题目】已知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 &f) /* 求k阶斐波那契序列的第m项的值f */ int fibo100; int i; if(k 2 | m 0) return ERROR; if(m = k) if(m = k - 2) f = 0; else f = 1; else for(i = 0; i k - 2; i+) fiboi = 0; fibok - 1 = fibok = 1; for(i = k + 1; i MAXINT时,应按出错处理。注意选择你认为较好的出错处理方法。*/Status Series(int a, int n) /* 求i!*2i序列的值并依次存入长度为n的数组a; */* 若所有值均不超过MAXINT,则返回OK,否则OVERFLOW */ int partOne = 1; int partTwo = 1; for(int i = 0; i MAXINT) return OVERFLOW; ai = temp; return OK;1-23/*【题目】假设有A、B、C、D、E五个高等院校进行田径对抗赛,各院校的单项成绩均以存入计算机并构成一张表,表中每一行的形式为: 项目名称 性别 校名 成绩 得分编写算法,处理上述表格,以统计各院校的男、女总分和团体总分,并输出。*/void Scores(ResultType *result, ScoreType *score)/* 求各校的男、女总分和团体总分, 并依次存入数组score */* 假设比赛结果已经储存在result 数组中, */* 并以特殊记录 , male, , , 0 (域scorce=0)*/* 表示结束 */ for(int i = 0; resulti.score; +i) int index = 0; switch(resulti.schoolname) case A: index = 0; break; case B: index = 1; break; case C: index = 2; break; case D: index = 3; break; case E: index = 4; break; default: break; switch(resulti.gender) case male: scoreindex.malescore += resulti.score; break; case female: scoreindex.femalescore += resulti.score; break; default: break; for(int j = 0; j = S.length) return ERROR; else S.elemi = e; return OK; 2-9/*【题目】试写一算法,由长度为n的一维数组a构建一个序列S。序列的类型定义为:typedef struct ElemType *elem; int length; Sequence;*/Status CreateSequence(Sequence &S, int n, ElemType *a) /* 由长度为n的一维数组a构建一个序列S,并返回OK。 */* 若构建失败,则返回ERROR */ if(n = 0) return ERROR; else S.length = n; for(int i = 0; i n; +i, +a) S.elemi = *a; return OK; 2-21/*【题目】链表的结点和指针类型定义如下 typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;试写一函数,构建一个值为x的结点。*/LinkList MakeNode(ElemType x)/* 构建一个值为x的结点,并返回其指针。*/* 若构建失败,则返回NULL。 */ LNode temp = x, null ; LNode *node = &temp; return node;2-23/*【题目】链表的结点和指针类型定义如下 typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;试写一函数,构建长度为2且两个结点的值依次为x和y的链表。*/LinkList CreateLinkList(ElemType x, ElemType y) /* 构建其两个结点的值依次为x和y的链表。*/* 若构建失败,则返回NULL。 */ LNode node2 = y, null , node1 = x, &node2 ; LinkList list = &node1; return list;2-25/*【题目】链表的结点和指针类型定义如下 typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;试写一函数,构建长度为2的升序链表,两个结点的值分别为x和y,但应小的在前,大的在后。*/LinkList CreateOrdLList(ElemType x, ElemType y)/* 构建长度为2的升序链表。 */* 若构建失败,则返回NULL。 */ LNode node2 = x = y ? y : x, null ; LNode node1 = x = y ? x : y, &node2 ; LinkList list = &node1; return list;3-3/*【题目】试写一算法,实现顺序栈的判空操作StackEmpty_Sq(SqStack S)。顺序栈的类型定义为:typedef struct ElemType *elem; / 存储空间的基址 int top; / 栈顶元素的下一个位置,简称栈顶位标 int size; / 当前分配的存储容量 int increment; / 扩容时,增加的存储容量 SqStack; / 顺序栈*/Status StackEmpty_Sq(SqStack S)/* 对顺序栈S判空。 */ /* 若S是空栈,则返回TRUE;否则返回FALSE */ if(!*S.elem) return TRUE; else return FALSE;3-5/*【题目】试写一算法,实现顺序栈的取栈顶元素操作GetTop_Sq(SqStack S, ElemType &e)。顺序栈的类型定义为:typedef struct ElemType *elem; / 存储空间的基址 int top; / 栈顶元素的下一个位置,简称栈顶位标 int size; / 当前分配的存储容量 int increment; / 扩容时,增加的存储容量 SqStack; / 顺序栈*/Status GetTop_Sq(SqStack S, ElemType &e) /* 取顺序栈S的栈顶元素到e,并返回OK; */ /* 若失败,则返回ERROR。 */ if(!*S.elem) return ERROR; else e = *(S.elem + S.top - 1); return OK; 3-7/*【题目】试写一算法,实现顺序栈的出栈操作Pop_Sq(SqStack &S, ElemType &e)。顺序栈的类型定义为:typedef struct ElemType *elem; / 存储空间的基址 int top; / 栈顶元素的下一个位置,简称栈顶位标 int size; / 当前分配的存储容量 int increment; / 扩容时,增加的存储容量 SqStack; / 顺序栈*/Status Pop_Sq(SqStack &S, ElemType &e) /* 顺序栈S的栈顶元素出栈到e,并返回OK;*/ /* 若失败,则返回ERROR。 */ if(!*S.elem) return ERROR; else e = *(S.elem + S.top - 1); -S.top; return OK; 3-11/*【题目】若顺序栈的类型重新定义如下。试编写算法,构建初始容量和扩容增量分别为size和inc的空顺序栈S。typedef struct ElemType *elem; / 存储空间的基址 ElemType *top; / 栈顶元素的下一个位置 int size; / 当前分配的存储容量 int increment; / 扩容时,增加的存储容量 SqStack2;*/Status InitStack_Sq2(SqStack2 &S, int size, int inc)/* 构建初始容量和扩容增量分别为size和inc的空顺序栈S。*/ /* 若成功,则返回OK;否则返回ERROR。 */ if(size = 0 | inc = S.size) S.size += S.increment; *S.top = e; +S.top; return OK;3-17/*【题目】若顺序栈的类型重新定义如下。试编写算法,实现顺序栈的出栈操作。typedef struct ElemType *elem; / 存储空间的基址 ElemType *top; / 栈顶元素的下一个位置 int size; / 当前分配的存储容量 int increment; / 扩容时,增加的存储容量 SqStack2;*/Status Pop_Sq2(SqStack2 &S, ElemType &e) /* 若顺序栈S是空的,则返回ERROR; */ /* 否则将S的栈顶元素出栈到e,返回OK。*/ if(!*(S.top - 1) return ERROR; else e = *(S.top - 1); -S.top; return OK; 3-22/*【题目】试写一算法,借助辅助栈,复制顺序栈S1得到S2。顺序栈的类型定义为:typedef struct ElemType *elem; / 存储空间的基址 int top; / 栈顶元素的下一个位置,简称栈顶位标 int size; / 当前分配的存储容量 int increment; / 扩容时,增加的存储容量 SqStack; / 顺序栈可调用顺序栈接口中下列函数:Status InitStack_Sq(SqStack &S, int size, int inc); / 初始化顺序栈SStatus DestroyStack_Sq(SqStack &S); / 销毁顺序栈SStatus StackEmpty_Sq(SqStack S); / 栈S判空,若空则返回TRUE,否则FALSEStatus Push_Sq(SqStack &S, ElemType e); / 将元素e压入栈SStatus Pop_Sq(SqStack &S, ElemType &e); / 栈S的栈顶元素出栈到e*/Status CopyStack_Sq(SqStack S1, SqStack &S2) /* 借助辅助栈,复制顺序栈S1得到S2。 */ /* 若复制成功,则返回TRUE;否则FALSE。 */ ElemType temp; SqStack S3; InitStack_Sq(S2, S1.size, S1.increment); InitStack_Sq(S3, S1.size, S1.increment); while(!StackEmpty_Sq(S1) Pop_Sq(S1, temp); Push_Sq(S3, temp); while(!StackEmpty_Sq(S3) Pop_Sq(S3, temp); Push_Sq(S2, temp); DestroyStack_Sq(S3); return TRUE;3-33/*【题目】试写一算法,求循环队列的长度。循环队列的类型定义为:typedef struct ElemType *base; / 存储空间的基址 int front; / 队头位标 int rear; / 队尾位标,指示队尾元素的下一位置 int maxSize; / 最大长度 SqQueue;*/int QueueLength_Sq(SqQueue Q)/* 返回队列Q中元素个数,即队列的长度。 */ return (Q.rear - Q.front + Q.maxSize) % Q.maxSize;3-35/*【题目】如果希望循环队列中的元素都能得到利用,则可设置一个标志域tag,并以tag值为0或1来区分尾指针和头指针值相同时的队列状态是空还是满。试编写与此结构相应的入队列和出队列的算法。本题的循环队列CTagQueue的类型定义如下:typedef struct ElemType elemMAXQSIZE; int tag; int front; int rear; CTagQueue;*/Status EnCQueue(CTagQueue &Q, ElemType x)/* 将元素x加入队列Q,并返回OK;*/* 若失败,则返回ERROR。 */ if(Q.rear + MAXSIZE - Q.front) % MAXSIZE) Q.elemQ.rear+ % MAXSIZE = x; else if(Q.tag = 0) Q.elemQ.rear+ % MAXSIZE = x; else return ERROR; if(Q.rear + MAXSIZE - Q.front) % MAXSIZE = 0) Q.tag = 1; return OK;Status DeCQueue(CTagQueue &Q, ElemType &x)/* 将队列Q的队头元素退队到x,并返回OK;*/* 若失败,则返回ERROR。 */ if(Q.rear + MAXSIZE - Q.front) % MAXSIZE) x = Q.elemQ.front+ % MAXSIZE; else if(Q.tag = 1) x = Q.elemQ.front+ % MAXSIZE; else return ERROR; if(Q.rear + MAXSIZE - Q.front) % MAXSIZE = 0) Q.tag = 0; return OK;3-37/*【题目】假设将循环队列定义为:以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。本题的循环队列CLenQueue的类型定义如下:typedef struct ElemType elemMAXQSIZE; int length; int rear; CLenQueue;*/Status EnCQueue(CLenQueue &Q, ElemType x) /* 将元素x加入队列Q,并返回OK;*/ /* 若失败,则返回ERROR。 */ if(Q.length 0) x = Q.elem(Q.rear + 1 + MAXQSIZE - Q.length-) % MAXQSIZE; return OK; else return ERROR;3-44/*【题目】已知k阶斐波那契序列的定义为: f0=0, f1=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 */ long f; int i; int fibonacci10; SqQueue Q = &fibonacci0, 0, 0, k + 1 ; for(i = 0; i k - 2; +i) Q.basei = 0; Q.basek - 1 = Q.basek = 1; for(i = k + 1; i = n; i+) if(Q.front = Q.rear - 1) 0) Q.front = k; Q.baseQ.rear+ = 2 * Q.baseQ.front - Q.base(+Q.front) %= Q.maxSize; Q.rear %= Q.maxSize; f = Q.basen % Q.maxSize; return f; 3-72/*【题目】设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=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, */* 返回, 若A, 若AB */ #define SMALL int index = 0; if(A.length) if(B.length) while(A.elemindex = B.elemindex) index+; if(index = A.length) if(index = B.length) return EQUAL; else return SMALL; else if(index = B.length) return LARGE; if(A.elemindex B.elemindex) return LARGE; else return SMALL; else return LARGE; else if(B.length) return SMALL; else return EQUAL; 3-75/*【题目】试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,an)逆置为(an,an-1,a1)。顺序表类型定义如下:typedef struct ElemType *elem; int length; int size; int increment; SqList;*/void Inverse(SqList &L) ElemType temp; for(int i = 0; i L.length / 2; +i) temp = L.elemi; L.elemi = L.elemL.length - i - 1; L.elemL.length - i - 1 = temp; 3-81/*【题目】试对一元稀疏多项式Pn(x)采用存储量同多项式项数m成正比的顺序存储结构,编写求Pn(x0)的算法(x0为给定值)。一元稀疏多项式的顺序存储结构:typedef struct int coef; / 系数 int exp; / 指数 Term;typedef struct Term *elem; / 存储空间基址 int length; / 长度(项数) Poly;*/float Evaluate(Poly P, float x)/* P.elemi.coef 存放ai, */* P.elemi.exp存放ei (i=1,2,.,m) */* 本算法计算并返回多项式的值。不判别溢出。 */* 入口时要求0e1e2.em,算法内不对此再作验证 */ float temp = 1; int currentExp = 0; float result = 0; for(int i = 0; i P.length; +i) for(int j = currentExp; j P.elemi.exp; +j, currentExp = j) temp *= x; result += P.elemi.coef * temp; return result;3-85/*【题目】假设有两个集合A和B分别用两个线性表LA和LB表示(即:线性表中的数据元素即为集合中的成员),试写一算法,求并集AAB。顺序表类型定义如下typedef struct ElemType *elem; / 存储空间的基址 int length; / 当前长度 int size; / 存储容量 int increment; / 空间不够增加空间大小 SqList; / 顺序表可调用顺序表的以下接口函数: Status InitList_Sq(SqList &L, int size, int inc); / 初始化顺序表Lint ListLength_Sq(SqList L); / 返回顺序表L中元素个数Status GetElem_Sq(SqList L, int i, ElemType &e); / 用e返回顺序表L中第i个元素的值int Search_Sq(SqList L, ElemType e); / 在顺序表L顺序查找元素e,成功时返回该元素在表中第一次出现的位置,否则返回-1Status Append_Sq(SqList &L, ElemType e); / 在顺序表L表尾添加元素e*/void Union(SqList &La, SqList Lb) ElemType e; for(int i = 0; i data; return OK;4-31/*【题目】试写一算法,实现链队列的判空操作。链队列的类型定义为: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.front | !Q.rear) return TRUE; return FALSE;4-33/*【题目】试写一算法,实现链队列的求队列长度操作。链队列的类型定义为:typedef struct LQNode ElemType data; struct LQNode *next; LQNode, *QueuePtr; / 结点和结点指针类型typedef struct QueuePtr front; / 队头指针 QueuePtr rear; / 队尾指针 LQueue; / 链队列类型*/int QueueLength_LQ(LQueue Q)/* 求链队列Q的长度并返回其值 */ int cnt = 0; while(Q.front) cnt+; Q.front = Q.front-next; return cnt;4-38/*【题目】假设以带头结点的循环链表表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025内蒙古呼伦贝尔选聘政务服务社会监督员9人考试模拟试题及答案解析
- 2025-2030肉牛品种改良技术创新与产业升级路径及市场机遇分析报告
- 2025-2030羊肉批发零售渠道变革与数字化转型分析报告
- 2025-2030离心式稠油泵油田开采场景适应性及技术改进
- 2025-2030畜禽养殖大数据平台建设与应用场景探索
- 2025年8月广东广州市天河第一小学招聘编外聘用制专任教师1人备考考试题库附答案解析
- 2025中国农工民主党安顺市委员会招聘公益性岗位人员备考考试题库附答案解析
- 用什么软件制作培训课件
- 服装质量管理培训课件
- 2025招商证券股份有限公司雄安分公司招聘38人备考考试试题及答案解析
- 电动托盘车(搬运车)培训-课件
- 14K118 空调通风管道的加固
- 安庆飞凯新材料有限公司6000吨-年光固化树脂及表面处理涂料项目环境影响报告书
- 月子会所运营方案
- 排污单位自行监测方案编制模板
- 工作安全分析JSA杜邦
- YY 1727-2020口腔黏膜渗出液人类免疫缺陷病毒抗体检测试剂盒(胶体金免疫层析法)
- 粘膜免疫系统概述
- 10室外配电线路工程定额套用及项目设置
- 钢板桩及支撑施工方案
- 冷藏车保温箱冰排使用记录
评论
0/150
提交评论