数据结构期中作业
数据结构期中考试试卷

数据结构期中考试试卷一、选择题(每题2分,共20分)1. 在数据结构中,线性结构的特点是什么?A. 元素之间存在一对一关系B. 元素之间存在一对多关系C. 元素之间存在多对多关系D. 元素之间存在一对一或多对多关系2. 以下哪个算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序3. 在二叉树中,度为2的节点最多有多少个子节点?A. 1B. 2C. 3D. 44. 哈希表解决冲突的方法不包括以下哪一项?A. 分离链接法B. 开放寻址法C. 链地址法D. 树形结构法5. 以下哪个不是图的遍历算法?A. 深度优先搜索B. 广度优先搜索C. 动态规划D. 克鲁斯卡尔算法6. 栈的特点是?A. 后进先出B. 先进后出C. 先进先出D. 后进后出7. 以下哪个不是二叉搜索树的性质?A. 左子树上所有节点的值小于它的根节点的值B. 右子树上所有节点的值大于它的根节点的值C. 左子树和右子树都是二叉搜索树D. 所有节点的值都相等8. 在数据库中,索引的作用是什么?A. 增加数据存储空间B. 提高数据检索效率C. 降低数据插入速度D. 减少数据存储量9. 以下哪个不是图的存储结构?A. 邻接矩阵B. 邻接表C. 树形结构D. 边列表10. 递归算法的基本思想是什么?A. 将问题分解为更小的子问题B. 重复执行相同的操作C. 将问题转化为非递归形式D. 避免使用循环结构二、填空题(每题2分,共20分)1. 在数据结构中,______是一种特殊的线性表,只允许在一端进行插入和删除操作。
2. 排序算法中,______排序的时间复杂度为O(n^2),适用于小规模数据的排序。
3. 在图的表示中,______矩阵可以有效地表示稠密图。
4. 哈希表中,______是指两个关键字通过哈希函数得到同一个哈希地址。
5. 栈和队列的主要区别在于,栈是______,而队列是先进先出。
6. 二叉树的遍历方式包括前序遍历、中序遍历和______遍历。
数据结构期中试题及参考答案

}LNode, *LinkList;
阅读算法 f31,并回答问题;
(1)设节点结构为id score next
,成绩链表 A 和 B 如图所示,画
出执行算法 f31(A,B)后节点 A 所指的链表;
A
1 70
2 40
3 90
4 48
5 56
B
2 38
4 65
题 31 图
(2)减速算法 f31 的功能。 Void f31(LinkList A, LinkList B) { LinkList p,q; p = A->next; q = B->next; while (p && q) { if(p->id < q->id) p = p ->next; else if(p->if > q-> id) q =q –>next; else { if (p->score < 60)
I + = j + lt ;
}
}while (i+lt <= ls && j>=0);
Return k;
}
4
五、算法设计题(本题 14 分) 34.假设线性表采用顺序存储结构,其类型定义如下:
#define ListSize 100 typedef struct{
int data[ListSize]; int length; }SeqList, *Table; 编写算法,将顺序表 L 中所有值为奇数的元素调整到表的前端。
(1)设 n=10,元素
p=8
2
存储在 sa[p],写出下标 p 的值;
题 3-1 图
数据结构试卷(期中考试)

第页/共 页 《数据结构》期中考试试卷一、选择题(每题2分,共40分)1.组成数据的基本单位是【 】。
A .数据项B .数据类型C .数据元素D .数据变量 2.线性表采用链式存储时,结点的存储地址【 】。
A .必须是不连续的 B .连续与否均可C .必须是连续的D .和头结点的存储地址相连续3. 有一个含头结点的单链表,头指针为head ,判断其是否为空的条件为【 】。
A .head==NULL B . head->next==NULL C .head->next==head D .head!=NULL 4.算法分析的目的是【 】。
A .辨别数据结构的合理性B .评价算法的效率C .研究算法中输入与输出的关系D .鉴别算法的可读性5.已知指针p 所指结点不是尾结点,若在*p 之后插入结点*s ,则应执行下列哪一个操作?【 】。
A. s->next = p ; p-> next = s ;B. s-> next = p-> next ; p-> next = s ;C. s-> next = p-> next ; p = s ;D. p-> next = s ; s-> next = p ; 6.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可 能出现的出栈序列为【 】。
A .3,2,6,1,4,5B .5,6,4,2,3,1C .1,2,5,3,4,6D .3,4,2,1,6,5 7.一个元素进入队列的时间复杂度是【 】。
A O(1)B O(n)C O(n 2)D O(log 2n) 8.数组A[1..5,1..6]的每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,5]的地址为【 】。
A 1140 B 1145 C 1120 D 1125 9.链表不具有的特点是【 】。
数据结构期中练习(2022)

一、选择题(每题2分,共30分)1.设指针变量front表示链式队列的队头指针,指针变量rear表示链式队列的队尾指针,指针变量s指向将要入队列的结点X,则入队列的操作序列为()。
(A) front->next=s;front=s;(B) s->next=rear;rear=s;(C) rear->next=s;rear=s;(D) s->next=front;front=s;2.设一条单链表的头指针变量为head且该链表没有头结点,则其判空条件是()。
(A) head==0(B) head->next==0(C) head->next==head(D) head!=03.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是___。
(A) 3 1 2(B) 2 3 1(C) 1 2 3(D) 3 2 14.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为()。
(A) O(log2n)(B) O(1)(C) O(n2)(D) O(n)5.设循环队列的元素存放在一维数组A[0..40]中,队列非空时,front指示队首元素,rear指示队尾元素的后一个位置。
如果队列中元素的个数为15,front的值为33,则rear应指向的位置是()。
A. A[6]B. A[16]C. A[7]D. A[17]6.广义表A = (a,(b),(),(c,d,e,f))的长度为()。
A.3B.4C.5D.67.从广义表LS=((a, b), c, d)中分解出原子b的运算是()。
A. head(tail(LS))B. tail(head(LS))C. head(tail(head(LS)))D. tail(tail(head(LS)))8.二维数组A[12][18]采用以列为主优先存储方法,若每个元素各占3个存储单元,且第1个元素的地址为150,则元素A[10][8]的地址为()。
数据结构期中考试题

一、单项选择题(每小题3分,共30分)1、线性结构是数据元素之间存在的一种_______。
A、一对多关系B、多对多关系C、多对一关系D、一对一关系2、以下数据结构中,哪一个不是线性结构()A.生成树 B. 顺序栈 C. 单链表 D. 循环队列3、设n是偶数,则运行下列程序段的时间复杂度为()。
x=100;for(p=2;p<=n;p++)for(q=2*i;q<=n;q++)x=(x+1)*3;A.O(1) B.O(n) C.O(n2) D.O(lbn)4、若频繁地对线性表进行插入和删除操作,该线性表应该采用——存储结构。
A、散列B、顺序C、链式D、索引5、在非空双向循环链表中由q所指的链结点后面插入一个由p所指的链结点的动作依次为:p->llink=Q;p->rlink=q->rlink;q->rlink=p;_______.(空白处为一条赋值语句) A、q->llink=p B、q->rlink->llink=pC、p->rlink->llink=pD、p->llink->llink=p6、设循环队列的结构是:const int Maxsize=100;typedef int Data Type;typedef struct {Data Type data[Maxsize];Int front, rear;} Queue;若有一个Queue类型的队列Q,试问判断队列满的条件应是下列哪一个语句()A 、Q.front= = Q.rear; B、 Q.front - Q.rear= = Maxsize;C、Q.front + Q.rear= = Maxsize;D、 Q.front= = (Q.rear+1)% Maxsize;7、已知L是一个不带表头的单链表, 在表首插入结点*p的操作是()。
A. p = L; p->next = L;B. p->next = L; p = L;C. p->next = L; L = p;D. L = p; p->next= L;8、下面关于串的叙述中,哪一个是不正确的?( )A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储9、若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( )。
数据结构期中考试试题及答案

一、单项选择题(本题总分 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 )。
数据结构期中练习题

电子科技大学成都学院2010-2011学年第二学期期中习题数据结构一、填空题1.数据的逻辑结构包括集合、____线性____、树形结构和图状结构四种类型。
2.已知有实现同一功能的两个算法,其时间复杂度分别为O(2n)和O(n),哪个算法的效率更高?______ O(n)__3.若经常需要对线性表进行删除操作,则最好采用_____链表___存储结构。
4.在一个单链表L中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则应进行的操作序列为:___________ p一>next=q->next _____,q一>next=p。
5.在以L为头指针的带头结点的单循环链表中,链表为空的条件分别为___L->next=L_____。
6.在双向链表中,每个结点含有两个指针域,一个指向__头______结点,另一个指向___尾_____结点。
7.设元素1,2,3,4,5依次进栈S,若要在输出端得到序列34251,则应进行的操作序列为:push(S,1),push(S,2),push(S,3),pop(S),_ push(S,4)_______,pop(S),pop(S),push(S,5),___ pop(S)_____,pop(S)。
8.已知循环队列的存储空间为数组a[21],且头指针和尾指针分别为8和3,则该队列的当前长度为____15____。
9.一个串的任意个连续的字符组成的子序列称为该串的__子串______,包含该子序列的串称为__主串______。
10.广义表(A,(a,b),d,e,((i,j),k)),则广义表的长度为__5______,深度为___4_____。
二、选择题1.计算机识别、存储和加工处理的对象被统称为___A_____。
A. 数据B. 数据元素C. 数据结构D. 数据类型2.下面程序段的时间复杂度为______C__。
for(int i=0; i<m; i++)for(int j=0; j<n; j++)A[i][j]=i*j;A. O(m2)B. O(n2)C. O(m*n)D. O(m+n)3.下列有关线性表的叙述中,正确的是___A_____。
数据结构期中试卷及答案

一、选择题(每小题2分,共30分)1. 数据结构是( D )。
A.一种数据类型 B.数据的存储结构C.一组性质相同的数据元素的集合D.相互之间存在一种或多种特定关系的数据元素的集合2.以下与数据的存储结构无关的术语是( D )。
A.链队列 B. 链表 C. 顺序表 D. 栈3.以下数据结构中,( A )是非线性数据结构A.树 B.字符串 C.队 D.栈4.一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是(B)。
A.98 B.100 C.102 D.1065.在线性表的下列运算中,不改变数据元素之间结构关系的运算是(D)。
A.插入 B.删除 C.排序 D.查找6.线性表采用链式存储时,其地址(D )。
A.必须是连续的 B.一定是不连续的C.部分地址必须连续 D.连续与否均可以7.线性表是(A )。
A.一个有限序列,可以为空 B.一个有限序列,不可以为空C.一个无限序列,可以为空 D.一个无限序列,不可以为空8.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为(B)。
A.3,2,6,1,4,5 B.3,4,2,1,6,5C.1,2,5,3,4,6 D.5,6,4,2,3,19. 若一个栈的输人序列是1,2,3,…,n,输出序列的第一个元素是n,则第k个输出元素是(C )。
A.k B.n-k-1 C.n-k+1 D.不确定10.对于队列操作数据的原则是( A )。
A. 先进先出B. 后进先出C. 先进后出D. 不分顺序11. 栈和队列的共同点是( C )。
A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点12.在一个链队列中,假定front和rear分别为头指针和尾指针,删除一个结点的操作是( A )。
A.front=front->next B.rear=rear->nextC.rear->next=front D.front->next=rear13. 空串与空格串( B )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构期中作业文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]北京邮电大学远程教育计算机科学与技术专业《数据结构》实验指导书实验一线性表的插入和删除一、实验目的1、掌握用Turbo C上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。
二、实验内容线性表基本操作的实现当我们要在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表的第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。
若要删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。
程序实现:typedef Null 0;typedef int datatype;#define maxsize 1024;typedef struct{ datatype data[maxsize];int last;}sequenlist;int insert(L, x, i)sequenlist *L;int i;{ int j;if ((*L).last= =maxsize-1){ printf(“overflow”);return Null;}elseif ((i<1)‖(i>(*L).last+1){ printf(“error”);return Null;}else{ for(j=(*L).last; j>=i-1; j--) (*L).data[j+1]=(*L).data[j]; (*L).data[i-1]=x;(*L).last=(*L).last+1;}return(1);}int delete(L,i)sequenlist *L;int i;{ int j;if ((i<1)‖(i>(*L).last+1)){printf (“error”);return Null;}else{ for(j=i, j<=(*L).last; j++) (*L).data[j-1]=(*L).data[j]; (*L).data - -;}return(1);}void creatlist( ){ sequenlist *L;int n, i, j;printf(“请输入n个数据\n”);scanf(“%d”,&n);for(i=0; i<n; i++){ printf(“data[%d]=”, i);scanf (“%d”, (*L).data[i]); }(*L).last=n-1;printf(“\n”);}printout (L)sequenlist *L;{ int i;for(i=0; i<(*L).last; i++){ printf(“data[%d]=”, i);printf(“%d”, (*L).data[i]); }}main( ){ sequenlist *L;char cmd;int i, t;clscr( );printf(“i, I…..插入\n”);printf(“d,D…..删除\n”);printf(“q,Q……退出\n”); do{ do{cmd =getchar( );}while((cmd!=‘d’)‖(cmd!=‘D’)‖(cmd!=‘q’)‖(cmd!=‘Q’)‖(cmd!=‘i’)‖(cmd!=‘I’));switch (cmd){ case ‘i’,‘I’; scanf(&x);scanf(&i);insert(L, x, i);printout(L);break;case ‘d’,‘D’; scanf(&i);delete(L, i);printout(L);break;}}while ((cmd!=‘q’)&&( cmd!=‘Q’));}实验二二叉树的操作一、实验目的1、进一步掌握指针变量、动态变量的含义;2、掌握二叉树的结构特征,以及各种存储结构的特点及适用范围;3、掌握用指针类型描述、访问和处理二叉树的运算。
二、实验内容已知以二叉链表作存储结构,试编写按层次顺序遍历二叉树的算法。
算法思想:本算法要采用一个队列q,先将二叉树根结点入队列,然后退队列,输出该结点;若它有左子树,便将左子树根结点入队列;若它有右子树,便将右子树根结点入队列,直到队列空为止。
因为队列的特点是先进先出,从而达到按层次顺序遍历二叉树的目的。
程序实现:#define M 100#define Null 0typedef struct node{ int data;stuuct node *lchild, *rchild;} bitree;bitree *que[M];int front=0, rear=0;bitree *creat( ){ bitree *t;int x;scanf (“%d”, &x);if (x= =0)t=Null;else{t=malloc(sizeof(bitree));t→data=x;t→lchild=creat( );t→rchild=creat( );}return t;}void inorder( t )bitree *t;{ if (t!=Null){ inorder (t→lchild);printf(“%4d”, t→data);inorder (t→rchild);}}void enqueue(t)bitree *t;{ if(front!=(rear+1) % M){rear = (rear+1) % M;que[rear]=t;}}bitree *delqueue( ){if (front= =rear)return Null;front=(front+1) % M;return (que[front]);}void levorder ( t )bitree *t;{ bitree *p;if(t!=Null){enqueue( t );while(front!=rear){ p=delqueue( );printf(“%4d”, p→data); if(p→lchild!=Null)enqueue(p→l child);if(p→r child!=Null)enqueue(p→rchild);} }}main ( ){ bitree *root;printf(“\n”);root=creat ( );inorder(root);printf(“\n”);levorder(root);}实验三图的操作一、实验目的1、掌握图的基本存储方法;2、掌握有关图的操作算法并用高级语言实现;3、熟练掌握图的两种搜索路径的遍历方法。
二、实验内容假设以一个带权有向图表示某一区域的公交线路网,图中顶点代表一些区域中的重要场所,弧代表已有的公交线路,弧上的权表示该线路上的票价(或搭乘所需时间),试设计一个交通指南系统,指导前来咨询者以最低的票价或最少的时间从区域中的某一场所到达另一场所。
算法思想:下面是R、W、Floyd求每对顶点之间最短路径算法的C语言程序,程序中矩阵A用来进行n次迭代,矩阵P用来记录路径,P[i][j]为迭代过程中当前已经求得的从顶点i到顶点j的最短路径上最后被插入的那个顶点。
算法实现:typedef struct node{ int no;float wgt;struct node *next;}edgenode;typedef struct{ char vtx;edgenode *link;}vexnode;typedef vexnode Graph[n];void Floyd(Graph G, float A[n][n], int p[n][n]){int i, j, k;for (i=0; i<n; i++)for(j=0;j<n;j++){A[i][j]=G[i][j];P[i][j]=-1;}for (k=0; k<n; k++)for (i=0; i<n; i++)for (j=0; j<n; j++)if(A[i][k] +A[k][j]<A[i][j]){P[i][j]=k;A[i][j]=A[i][k]+A[k][j];}}实验四排序一、实验目的1、掌握常用的排序方法,并掌握用高级语言实现排序算法的方法;2、深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用;3、了解各种方法的排序过程及其依据的原则,并掌握各种排序方法的时间复杂度的分析方法。
二、实验内容统计成绩[问题描述]给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:(1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;(2)按名次列出每个学生的姓名与分数。
[基本要求]学生的考试成绩表必须通过键盘输入数据而建立,同时要对输出进行格式控制。
[算法实现]下面给出的是用直接选择排序算法实现的C语言程序。
#define n 30typedef struct student{ char name[8];int score;}student R[n];main ( ){ int num, i, j, max, temp;printf(“\n请输入学生成绩: \n”);for (i=0; i<n; i++){ printf (“姓名:”);scanf (“%s”, &stu[i].name);scanf (“%4d”, &stu[i].score);}num=1;for (i=0; i<n; i++){ max=i;for (j=i+1; j<n; j++)if (R[j].score>R[max].score)max=j;if (max!=i){ temp = R[max];R[max]=R[i];R[i]= temp;}if ((i>0)&&(R[i].score<R[i-1].score))num=num+1;printf(“%4d%s%4d”, num, R[i].name, R[i].score);}}实验五查找一、实验目的1、掌握查找的不同方法,并能用高级语言实现查找算法;2、熟练掌握二叉树的构造和查找方法。
二、实验内容设计一个读入一串整数构成一棵二叉排序树的算法。
[实现提示]二叉排序树的构成,可从空的二叉树开始,每输入一个结点数据,就建立一个新结点插入到当前已生成的二叉排序树中,所以它的主要操作是二叉排序树插入运算。
在二叉排序树中插入新结点,只要保证插入后仍符合二叉排序树的定义即可。