




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、单项选择题1. 数据结构是指( )。A.数据元素的组织形式B.数据类型C.数据存储结构 D.数据定义2. 数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为( )。A.存储结构B.逻辑结构 C.链式存储结构D.顺序存储结构3. 计算机内部数据处理的基本单位是( )。A.数据 B.数据元素C.数据项D.数据库4. 线性表是_。A一个有限序列,可以为空B一个有限序列,不可以为空C一个无限序列,可以为空D一个无限序列,不可以为空5. 在一个长度为n的顺序表中删除第i个元素(0=inext=s; s-prior=p; p-next-prior=s; s-next=p-next;B s-prior=p; s-next=p-next; p-next=s; p-next-prior=s;C p-next=s; p-next-prior=s; s-prior=p; s-next=p-next;D s-prior=p; s-next=p-next; p-next-prior=s; p-next=s;7. 设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为_。Ap-next=p-next-next;Bp=p-next;Cp=p-next-next; Dp-next=p; 8. 在一个长度为n的顺序表中向第i个元素(0 inext=p-next; p-next=sBq-next=s; s-next=pCp-next=s-next; s-next=pDp-next=s; s-next=q10. 在一个具有n个结点的有序单链表中插入一个新结点并保持该表有序的时间复杂度是_。 AO(1) BO(n) CO(n2) DO(log2n)15. 设有一个栈,元素的进栈次序为A, B, C, D, E,下列是不可能的出栈序列_。AA, B, C, D, E BB, C, D, E, A11. 在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队满的条件为_。Arearn= = front B(front+l)n= = rearCrearn -1= = front D(rear+l)n= = front 12. 在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队空的条件为_。Arearn= = front Bfront+l= rearCrear= = front D(rear+l)n= front13. 在一个链队列中,假定front和rear分别为队首和队尾指针,则删除一个结点的操作为_。Afront=front-next Brear=rear-nextCrear=front-next Dfront=rear-next14. 若SUBSTR(S,i,k)表示求S中从第i个字符开始的连续k个字符组成的子串的操作,则对于S=“BeijingNanjing”,SUBSTR(S,4,5)=( )。A. “ijing”B. “jing” C. “ingNa”D. “ingN”15. 若INDEX(S,T)表示求T在S中的位置的操作,则对于S=“BeijingNanjing”,T=“jing”,INDEX(S,T)=( )。A.2 B.3 C.4 D.516. 若REPLACE(S,S1,S2)表示用字符串S2替换字符串S中的子串S1的操作,则对于S=“BeijingNanjing”,S1=“Beijing”,S2=“Shanghai”,REPLACE(S,S1,S2)=( )。A. “NanjingShanghai” B. “NanjingNanjing”C. “ShanghaiNanjing” D. “ShanghaiNanjing”17. 已知二维数组A1010中,元素a20的地址为560,每个元素占4个字节,则元素a10的地址为( )。A.520B.522C.524D.51818. 设有广义表D=(a,b,D),其长度为( ),深度为( )。A.无穷大 B.3C.2 D.519. 广义表A=(a),则表尾为( )。A.a B.( )C.空表 D.(a)20. 广义表A=(x,(a,B),(x,(a,B),y),则运算head(head(tail(A)的结果为( )。A.x B.(a,B) C.(x,(a,B) D.A21. 通常对数组进行的两种基本操作是( )。A.建立与删除B.索引和修改 C.查找和修改 D.查找与索引22. 假定在数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数为( )。A.80B.100C.240D.27023. 稀疏矩阵一般的压缩存储方法有两种,即( )。A.二维数组和三维数组 B.三元组和散列C.三元组和十字链表 D.散列和十字链表二、填空题 1. 数据结构按逻辑结构可分为两大类,分别是_和_。2. 数据的逻辑结构有四种基本形态,分别是_、_、_和_。3. 线性结构反映结点间的逻辑关系是_的,非线性结构反映结点间的逻辑关系是_的。4. 一个算法的效率可分为_效率和_效率。9. 下面程序段的时间复杂度是_。i=s=0;while(sn) i+; s+=i;10. 下面程序段的时间复杂度是_。s=0;for(i=0;in;i+)for(j=0;jn;j+)s+=Bij;sum=s;11. 下面程序段的时间复杂度是_。i=1;while(inext; while (p!=NULL) if(p-datadata=max) q=p; p=p-next; else q-next=p-next;free(p);p=q-next; 7本题是对一个循环链队列做插入和删除运算,假设不需要保留被删结点的值和不需要回收结点,算法描述如下:(1)插入(即入队)算法:insert(LinkList *rear, elemtype x) /设循环链队列的队尾指针为rear,x为待插入的元素 LinkList *p;p=(LinkList *)malloc(sizeof(LinkList);if(rear= =NULL) /如为空队,建立循环链队列的第一个结点 rear=p;rear-next=p; /链接成循环链表else /否则在队尾插入p结点 p-next=rear-next;rear-next=p; rear=p;(2)删除(即出队)算法:delete(LinkList *rear) /设循环链队列的队尾指针为rearif (rear= =NULL) /空队 printf(underflown); if(rear-next= =rear) /队中只有一个结点rear=NULL;elserear-next=rear-next-next; /rear-next指向的结点为循环链队列的队头结点8只要从终端结点开始往前找到第一个比x大(或相等)的结点数据,在这个位置插入就可以了。算法描述如下:int InsertDecreaseList( SqList *L, elemtype x ) int i;if ( (*L).len= maxlen) printf(“overflow);return(0);for ( i=(*L).len ; i0 & (*L).elem i-1 next=p时,说明此时q所指的结点为p所指结点的前趋结点,从而可得算法如下:void delete (LinkList *p) /在链表中删除p所指结点的前趋结点LinkList *q,*t; q=p; while(q-next-next!=p) /q-next不是p的前趋结点 q=q-next; t=q-next; /t指向要删除结点 q-next=p; /删除t结点 free(t);【例2-4】试设计实现删除单链表中值相同的多余结点的算法。解:该例可以这样考虑,先取开始结点的值,将它与其后的所有结点值一一比较,发现相同的就删除掉,然后再取第二结点的值,重复上述过程直到最后一个结点。设单链表(其类型为LinkList)的头指针head指向头结点,则可按下列步骤执行:首先,用一个指针p指向单链表中第一个表结点,然后用另一个指针q查找链表中其余结点元素,由于是单链表,故结束条件为p= =NULL,同时让指针s指向q所指结点的前趋结点,当查找到结点具有q-data= =p-data时删除q所指的结点,然后再修改q,直到q为空;然后使p指针后移(即p=p-next),重复进行,直到p为空时为止。算法描述如下:del(LinkList *head) /删除单链表中值相同的多余结点 LinkList *p, *s, *q; p=head-next;while(p!=NULL & p-next!=NULL) s=p; /s指向要删除结点的前趋q=p-next; while (q!=NULL) if (q-data= =p-data) /查找值相同的结点并删除 s-next=q-next; free(q); q=s-next; else s=q; q=q-next; p=p-next;【例2-2】写一算法实现单链表的逆置。解:假设单链表的表头指针用head表示,其类型为上面定义的LinkList,并且单链表不带头结点。逆置后原来的最后一个结点成为第一个结点,于是从第一个结点开始逐个修改每个结点的指针域进行逆置,且刚被逆置的结点总是新链表的第一个结点,故令head指向它(如图2-1所示)。具体算法描述如下:图2-1 单链表逆置示意图示示图headheadqpheadq(a)单链表初始状态示示图(b)第三个结点逆置示示图void contray(LinkList *head) /将head单链表中所有结点按相反次序链接 LinkList *p, *q;p=head; /p指向未被逆序的第一个结点,初始时指向原表头结点 head=NULL; while(p!=NULL) q=p; /q指向将被逆序链接的结点 p=p-next; q-next=head; head=q; 【例2-1】试编写出将两个顺序存储的有序表A和B合成一个有序表C的算法。解:假设A、B和C的类型为下述SqList类型:#define maxlen 1000 typedef int elemtype typedef struct elemtype elemmaxlen; int len; SqList; 设A和B的数据元素均为整数且为升序排列,设A的长度为m,B的长度为n,则合并后C的长度为m+n。合并时进行A、B元素的比较,将较小的链入C中,算法描述如下:int merge (SqList *A, SqList *B, SqList *C) /将两个有序表A和B合成一个有序表C int m,n,i,j,k; m=(*A).len; n=(*B).len;if (m+nmaxlen-1) printf(overflow);exit (0); i=0; j=0; /i和j分别作为扫描顺序表A和B的指针k=0; /k指示顺序表C中当前位置 whi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个性化定制离婚协议书模板
- 物流运输合同签订与仓储管理流程图
- 离异父母子女抚养费增加及支付金额调整协议
- 物业分公司7月物业费收缴及使用专项合同
- 离婚协议签订时双方子女国际交流及留学协议
- 煤炭运输合同范本:煤炭行业运输安全标准
- 房地产销售团队核心信息保密及竞业限制合同样本
- 讲师礼仪培训纲要
- 生字记得快课件
- 乳房标本解剖课件
- 2025混凝土建材购销合同范本
- 支教考试笔试试题真题及答案
- 2024-2025学年四年级第一学期语文教学计划及教学进度表
- 餐饮公司中标协议书
- 肥胖症诊疗指南(2024年版)解读
- 入股瑜伽店协议书
- 旅游团队境外医疗援助补充协议
- 汽车报废委托协议书
- 光伏支架生产工艺流程
- 钢结构雨棚作业安全技术交底
- 女性私密项目培训
评论
0/150
提交评论