有两张单调递增有序的线性表A和B-采用顺序存储结构-将这两张表合并成C表-要求C表单调递减有序。Wo
第二章顺序存储结构的线性表——习题课

6、栈和队列的共同点是_____。 A、都是先进后出 B、都是先进先出 C、只允许在端点处插入和删除元素 D、没有共同点
填空题
1、向量、栈和队列都是____结构,可以 在向量的__位置插入和删除元素;对于 栈只能在__插入和删除元素;对于队列 只能在___插入元素和___删除元素。 2、向一个长度为n的向量的第i(0<i<n+2) 个元素之前插入一个元素时,需向后移 动____个元素。 3、向一个长度为n的向量中删除第 i(0<i<n+2)个元素时,需向前移动____个 元素。
PROCEDURE hebing(a[], b[],m,n) ET a[], ET b[],int m,int n i=1; j=1; k=1; While(i<=m and j<=n) do If (a[i]<b[j]) { c[k]=a[i];i=i+1;k=k+1; } Else {c[k]=b[j];j=j+1;k=k+1; } If(j=n) for t=(i+1) to m do { c[k]=a[t];k=k+1 } If (i=m) for t=(j+1) to n do { c[k]=b[t]; k=k+1; }
第二题
试写出在顺序存储结构下逆转线性表的 算法,要求使用最少的附加空间。
PROCEDURE nizhuan(ET a[],int n) For k=1 to n/2 do { t=a[k]; a[k]=a[n-k+1]; a[n-k+1]=t; } END
第三题
将递增有序的单链表A和B合并成递减有序的单链表C

}
B=CreateLinkList();//生成单链表B
printf("Output list B:\n");
print(B);//输出单链表B
printf("Make list C:\n");
Merge(A,B,&C);//将升序链表A、B合并成降序链表C
printf("Output list C:\n");
p->next=NULL;
q->next=p;//在链尾插入
q=p;
}
return head;//返回指向单链表的头指针head
}
void Merge(LNode *A,LNode *B,LNode **C)
{ //将升序链表A、B合并成降序链表*C
LNode *p,*q,*s;
p=A->nex
LNode *A,*B,*C;
printf("Input data of list A:\n");
A=CreateLinkList();//生成单链表A
printf("Output list A:\n");
print(A);//输出单链表A
printf("Input data of list B:\n");
将递增有序的单链表A和B合并成递减有序的单链表C
实现程序如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;//data为结点的数据信息
struct node *next;//next为指向后继结点的指针
数据结构期中考试试题及答案

一、单项选择题(本题总分 20分,每题 2分)在每小题列出的四个选项中只有 一个选项是符合题目要求的,请将正确选项前的字母。
1.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为( D ) 。
A.顺序表 B.链表 C.索引表 D.散列表采用排除法,顺序表存储位置表示数据元素的顺序关系,跟关键字无法;链表的地址是动态分配的;索引表是 按数据元素的关键字排序所得,它的数据元素是没有规律的2.在长度为 n 的顺序表的第 i(1≤i ≤n+1)个位置上插入一个元素,元素的移动次数为( A ) 。
A.n -i+1B.n -iC.iD.i -1代入计算法,我们知道在 i=n+1 时不需要移动元素3.若一棵二叉树的先序遍历序列为 a,b,c ,则由 abc 三个结点构成的二叉树个数为( B ) 。
A.4B.5C.6D.74.三维数组 A[4][5][6]按行优先存储方法存储在内存中,若每个元素占 2 个存储单元,且数组中第一个元素的存 储地址为 130,则元素 A[3][4][5]的存储地址为(B A.370B .368C .366) 。
D.372Loc(3,4,5)=loc(0,0,0)+(3*5*6+4*6+5)*2=130+119*2=368;5.高度为 h 的二叉树(仅含根结点的二叉树高度为 1)的结点最少是多少( D) 。
A. h+1B. 2hC. 2h -1D. h二叉树性质 26. 将两个各有 n 个元素的有序表归并成一个有序表,其最多的比较次数是( A. nB.n+1 C. 2n-1D. n-17. 已知一算术表达式的中缀形式为 A +B *C -D/E ,后缀形式为 ABC *+DE/-,其前缀形式为( C) 。
A )。
A. -+A*BC/DE C. -+*ABC/DEB. –A+B*CD/E D. –A+B*C/DE根据中缀和后缀表达式可画出表达树如下:- + /A* D EBC故前缀表达式为:-+A*BC/DE数据结构期中考试8.下面图示的顺序存储结构表示的二叉树是( A )。
2020智慧树知道网课《数据结构(中国海洋大学)》课后章节测试满分答案

第一章测试1【单选题】(2分)图书馆的数目检索系统采用关系的数据结构。
A.树形B.图状C.集合D.线性2【单选题】(2分)是相互之间存在一种或多种特定关系的数据元素的集合。
A.数据项B.数据结构C.数据元素D.数据3【单选题】(2分)()是一个值的集合和定义在这个值集上的一组操作的总称。
A.数据项B.数据类型C.数据元素D.数据结构4【单选题】(2分)算法的确定性是指()A.算法中没有逻辑B.在任何情况下,算法不会出现死循环C.算法中的每一条指令必须有确切的含义D.当输入数据非法时,算法也能作出反应或进行处理第二章测试1【单选题】(2分)线性表中的数据元素有一个前驱多个后继。
A.错B.对2【单选题】(2分)用顺序结构存储,删除最后一个结点时,()A.其它B.会移动其它结点位置C.可能会移动其它结点位置D.一定不会移动其它结点位置3【单选题】(2分)链表中逻辑上相邻的元素的物理地址__________相邻。
A.一定不B.必定C.其它D.不一定4【单选题】(2分)1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。
//将合并逆置后的结果放在C表中,并删除B表StatusListMergeOppose_L(LinkList&A,LinkList&B,LinkList&C){LinkListpa,pb,qa,qb;pa=A;pb=B;qa=pa;//保存pa的前驱指针qb=pb;//保存pb的前驱指针pa=pa->next;pb=pb->next;A->next=NULL;C=A;while(pa&&pb){if(pa->data<pb->data){qa=pa;pa=pa->next;qa->next=A->next;//将当前最小结点插入A表表头A->next=qa;}else{qb=pb;pb=pb->next;()//将当前最小结点插入B表表头A->next=qb;}}while(pa){qa=pa;pa=pa->next;qa->next=A->next;A->next=qa;}while(pb){qb=pb;pb=pb->next;qb->next=A->next;A->next=qb;}pb=B;free(pb);returnOK;}A.qa->next=A->nextB.qa->next=A;C.qb->next=A->nextD.qb->next=A;5【单选题】(2分)假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。
《算法与数据结构》第1~3章 习题(包含了线性表、栈和队列,含答案)

{ p=p1; p1=p1->next; p->next= pa->next; pa->next= p; p2= p2->next;s1=s1+1;};
的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是(C)。
A. 6 B. 4 C. 3 D. 2
13.若用一个大小为6的数组来实现循环队列,且当前rear和
front的值分别为0和3,当从队列中删除一个元素,再加入两个
元素后,rear和front的值分别为多少?(B)
A. 1和 5 B. 2和4 C. 4和2 D. 5和1
10. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对
象栈和算符栈为( D ),其中^为乘幂 。
• 3,2,4,1,1;*^(+*- B. 3,2,8;*^- C. 3,2,4,2,2;*^(-
D. 3,2,8;*^(-
算法与数据结构
第1~3章 习题课
5 /31
11.循环队列存储在数组A[0..m]中,则入队时的操作为(D)。
C. q->next=p;q->pre=p->pre;p->pre->next=q;p->pre=q;
D. q->pre=p->pre;q->next=q;p->pre=q;p->pre=q; 5.栈的特点是( B ),队列的特点是( A ),栈和队列都是 ( A )。若进栈序列为1,2,3,4 则( C )不可能是一个出栈序 列(不一定全部进栈后再出栈);若进队列的序列为1,2,3,4 则 ( E )是一个出队列序列。 ①, ②: A. 先进先出 B. 后进先出 C. 进优于出 D. 出 优于进
专升本数据结构试题解析

第2部分习题解析第1章绪论1.1选择题1. 算法的时间复杂度取决于(C)A)问题的规模 B)待处理数据的初态 C) A和B【答案】C2.计算机算法指的是解决问题的步骤序列,它必须具备(B)这三个特性。
A)可执行性、可移植性、可扩充性B)可执行性、确定性、有穷性C)确定性、有穷性、稳定性D)易读性、稳定性、安全性【答案】B5.从逻辑上可以把数据结构分为(C)两大类。
A)动态结构、静态结构B)顺序结构、链式结构C)线性结构、非线性结构D)初等结构、构造型结构【答案】C6.在下面的程序段中,对x的赋值的语句频度为(C)for(i=0;i<n;i++)for(j=0;j<n;j++) x=x+1;A) O(2n) B)O(n) C.O(n2) D.O(log2n)【答案】C7.下面的程序段中, n为正整数,则最后一行的语句频度在最坏情况下是(D)for(i=n-1;i>=1;i--)for(j=1;j<=i;j++)if (A[j]>A[j+1])A[j]与A[j+1]对换;A. O(n)B) O(nlog2n) C) O(n3) D) O(n2)【答案】D1.2填空题2. 对于给定的n个元素,可以构造出的逻辑结构有_____________,_____________,_____________,_____________四种。
【答案】(1)集合(2)线性结构(3)树形结构(4)图状结构或网状结构4.数据结构中评价算法的两个重要指标是_____________。
【答案】算法的时间复杂度和空间复杂度。
5. 数据结构是研讨数据的_____________和_____________,以与它们之间的相互关系,并对与这种结构定义相应的_____________,设计出相应的_____________。
【答案】(1)逻辑结构(2)物理结构(3)操作(运算)(4)算法。
6.一个算法具有5个特性:_____________、_____________、_____________,有零个或多个输入、有一个或多个输出。
数据结构实验一实验报告——线性表

实验报告课程名称:数据结构实验名称:线性表班级:学生姓名:学号:指导教师评定:签名:题目:有两张非递增有序的线性学生表A,B,采用顺序存储结构,两张表合并用c表存,要求C为非递减有序的,然后删除C表中值相同的多余元素。
一、需求分析⒈本演示程序根据已有的两张表的信息,实现两张表的合并及删除值相同元素的操作,需要用户输入学生的信息。
⒉在演示过程序中,用户输入需要合并的顺序表,即可观看合并结果。
⒊程序执行的命令包括:(1)构造线性表A (2)构造线性表B (3)求两张表的并(4)删除C中值相同的元素二、概要设计⒈为实现上述算法,需要线性表的抽象数据类型:ADT Stack {数据对象:D={a i:|a i∈ElemSet,i=1…n,n≥0}数据关系:R1={<a i-1,a i>|a i-1,a i∈D,i=2,…n≥0}基本操作:init(list *L)操作结果:构造一个空的线性表L。
ListLength(List *L)初始条件:线性表L已经存在操作结果:返回L中数据元素的个数。
GetElem(List L, int i, ElemType *e)初始条件:线性表L已经存在,1≤i≤ListLength(&L)操作结果:用e返回L中第i个数据元素的值。
EqualList(ElemType *e1,ElemType *e2)初始条件:数据元素e1,e2存在操作结果:以e1,e2中的姓名项作为判定e1,e2是否相等的依据。
Less_EquaList(ElemType *e1,ElemType *e2)初始条件:数据元素e1,e2存在操作结果:以e1,e2中的姓名项(为字符串)的≤来判定e1,e2是否有≤的关系。
LocateElem(List *La,ElemType e,int type)初始条件:线性表La已经存在操作结果:判断La中是否有与e相同的元素。
MergeList(List *La,List *Lb,List *Lc)初始条件:非递减线性表La,Lb已经存在操作结果:合并La,Lb得到Lc,Lc仍按非递减有序排列。
数据结构合并两个顺序表

数据结构合并两个顺序表合并两个顺序表是在数据结构中常见的操作之一,本文将介绍如何合并两个顺序表,并给出相应的算法实现。
顺序表是一种线性表的存储结构,它使用连续的存储空间存储元素,并按照顺序存放。
合并两个顺序表的意思是将两个顺序表中的元素按照一定的顺序合并到一个新的顺序表中。
假设有两个顺序表A和B,它们的长度分别为m和n。
要合并这两个顺序表,可以使用以下步骤:1. 创建一个新的顺序表C,用于存放合并后的结果。
2. 首先将顺序表A中的元素复制到顺序表C中,保持元素的顺序不变。
3. 然后将顺序表B中的元素依次插入到顺序表C中的合适位置。
插入的位置可以根据需要进行调整,可以选择插入到顺序表C的末尾,也可以选择按照某种规则插入。
4. 最后,顺序表C中的元素就是合并后的结果。
在实现合并两个顺序表的算法时,可以使用两个指针分别指向顺序表A和顺序表B的元素。
比较指针指向的元素大小,然后将较小的元素插入到顺序表C中,并将对应的指针向后移动一位。
重复这个过程,直到遍历完两个顺序表中的所有元素。
下面是一个具体的算法实现示例:```void merge(SeqList A, SeqList B, SeqList C) {int i = 0; // 指向顺序表A的指针int j = 0; // 指向顺序表B的指针int k = 0; // 指向顺序表C的指针// 将顺序表A中的元素复制到顺序表C中while (i < A.length) {C.elements[k++] = A.elements[i++];}// 将顺序表B中的元素插入到顺序表C中while (j < B.length) {int x = B.elements[j++];// 找到插入位置int insertPos = 0;while (insertPos < k && C.elements[insertPos] < x) { insertPos++;}// 将元素插入到合适位置for (int m = k; m > insertPos; m--) {C.elements[m] = C.elements[m - 1];}C.elements[insertPos] = x;k++;}C.length = k; // 更新顺序表C的长度}```这个算法的时间复杂度为O(m+n),其中m和n分别为顺序表A 和顺序表B的长度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* Note:Your choice is C IDE */ #include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define OVERFLOW -2
typedef int status; typedef int elemtype;
#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct{
elemtype *elem;
int length;
int listsize;
}SqList;
status InitList_Sq(SqList *L)/*构造一个空的顺序表*/
{
L->elem=(elemtype*)malloc(LIST_INIT_SIZE*si zeof(elemtype));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
void shengcheng_Sq(SqList *L)/*建立一个顺序表,含有n个数据元素。
*/
{
int m,n;
printf("please enter some data:");
scanf("%d",&n);
/*printf("请输入%d个元素:",n);*/
for(m=0;m<n;m++)
{
scanf("%d",&L->elem[m]);
L->length++;
}
}
void shuchu_Sq(SqList L)/*输出顺序表及顺序表的长度*/
{
int i;
/*printf("顺序表中的元素是:\n");*/
for(i=0;i< L.length;i++)
{
printf("%d", L.elem[i]);
}
printf("\n");
}
void MergeList_Sq(SqList *La,SqList *Lb,SqList *Lc)/*将两个顺序有序表A和B合并为一个有序表
C。
*/
{
elemtype *pa,*pb,*pc,*pa_last,*pb_last;
pa=La->elem;pb=Lb->elem;
Lc->listsize =Lc->length =La->length +Lb->length ;
pc=Lc->elem =(elemtype *)malloc(Lc->listsize *sizeof(elemtype));
if(!Lc->elem) exit(OVERFLOW);
pa_last=La->elem+La->length-1;
pb_last=Lb->elem+Lb->length-1;
while(pa<=pa_last && pb<=pb_last){
if(*pa<=*pb) *pc++=*pa++;
else *pc++=*pb++;
}
while(pa<=pa_last) *pc++=*pa++;
while(pb<=pa_last) *pc++=*pb++;
}
void nizhi_Sq(SqList *La,SqList *Lb)/*将顺序表逆置,将结果保存到另外的顺序表中。
*/
{
int m,p;
InitList_Sq(Lb);
p=La->length-1;
for(m=0;m<=p;m++)
{
Lb->elem[m]=La->elem[p-m];
Lb->length++;
}
}
void main()
{
SqList La,Lb,Lc,Ld;
InitList_Sq(&La);
InitList_Sq(&Lb);
InitList_Sq(&Lc);
InitList_Sq(&Ld);
shengcheng_Sq(&La);
shuchu_Sq(La);
shengcheng_Sq(&Lb);
shuchu_Sq(Lb);
MergeList_Sq(&La,&Lb,&Lc);
shuchu_Sq(Lc);
nizhi_Sq(&Lc,&Ld);
shuchu_Sq(Ld);
}
(注:可编辑下载,若有不当之处,请指正,谢谢!)。