当前位置:文档之家› 数据结构练习题1

数据结构练习题1

数据结构练习题1
数据结构练习题1

一、判断

1.在顺序存储的线性表中,逻辑上相邻的两个数据元素在物理位置上并不一定紧邻。

2.单链表设置头结点的目的是为了简化运算。

3.从循环单链表的任一结点出发,可以找到表中所有结点。

4.数据的存储结构是数据的逻辑结构的存储映象,不仅要存储数据元素的值,还要存储元素之间的相互关系。

5.用顺序表来存储线性表时,不需要另外开辟空间来保存数据元素之间的相互关系。

6.从循环单链表的某一结点出发,只能找到它的后继结点,不能找到它的前趋结点。

7.在单链表中,头结点是必不可少的。

8. 在单链表中,要取得某元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

9. 在一个设有头指针和尾指针的单链表中,执行删除该单链表中最后一个元素的操作与链表的长度无关。

10. 顺序存储方式只能用于存储线性结构。

11.栈和队列都是线性表,只是在插入和删除时受到了一些限制。

二、选择

1.若线性表最常用的操作是存取第i个元素及其前趋的值,那么最节省操作时间的存储方式是( )。

A)单链表B)双链表C)单循环链表 D)顺序表

2.下面程序段的时间复杂度是()。

for (i=0;i

for(j=0;j

A[i][j]=1;

A)O(n) B)O(n+n+1) C)O(n+n) D)O(n*n)

3.设一个栈的输入序列为12345,则借助一个栈所得到的输出序列不可能是()。

A)54321 B)45321 C)43512 D)12345

4.设单链表中指针p指向结点A,要删除A之后的结点(若存在),则修改指针的操作为( )。

A)p—>next=p—>next—>next B)p=p—>next

C)p=p—>next—>next D)p—>next=p

5.算法分析的两个主要方面是()。

A) 空间复杂性和时间复杂性 B) 正确性和简明性

C) 可读性和文档性 D) 数据复杂性和程序复杂性

6.队列操作的原则是()。

A)先进先出 B)后进先出 C)只能进行插入 D)只能进行删除

7. 数据结构是()。

A.一种数据类型 B.数据的存储结构

C.一组性质相同的数据元素的集合

D.相互之间存在一种或多种特定关系的数据元素的集合

8. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为()。

A.3,2,6,1,4,5 B.3,4,2,1,6,5

C.1,2,5,3,4,6 D.5,6,4,2,3,1

9.求单链表中当前结点的后继和前驱的时间复杂度分别是()。

A.O(n)和O(1)B.O(1)和O(1)

C.O(1)和O(n) D.O(n)和O(n)

10.已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为( )。

A.q->next=s->next;s->next=p;

B.s->next=p;q->next=s->next;

C.p->next=s->next;s->next=q;

D.s->next=q;p->next=s->next;

11. 设循环队列中数组的下标范围是1~n,其头尾指针分别为f和r,则其元素个数为( )。

A. r-f

B. r-f+1

C. (r-f)mod n+1

D. (r-f+n)mod n

12. 算法是指( )。

A.为解决问题而编写的计算机程序 B.为解决问题而采取的方法与步骤

C.为解决问题而需要采用的计算机语言 D.为解决问题而采用的计算方法

13.设栈S的初始状态为空,现有5个元素组成的序列{1,2,3,4,5},对该序列在S栈上依次进行如下操作(从序列中的1开始,出栈后不再进栈):进栈、进栈、进栈、出栈、进栈、出栈、进栈。试问出栈的元素序列是( )。

A.{5,4,3,2,1} B.{2,1} C.{2,3} D.{3,4}

13.设指针变量 p 指向单链表中结点 A ,若删除单链表中结点 A ,则需要修改指针的操作序列为()。

A.q= p->next ; p->data=q->data ; p->next=q->next ; free(q) ;

B.q= p->next ; q->data=p->data ; p->next=q->next ; free(q) ;

C.q= p->next ; p->next=q->next ; free(q) ;

D.q= p->next ; p->data=q->data ; free(q) ;

14. 下面关于线性表的描述,错误的是( )。

A.栈是线性表的一种

B.任给一索引i(1<=i<=表中元素个数),就能在线性表中唯一确定一个元素

C.线性表的任一元素都有前驱和后继 D.线性表是一个线性序列

15. 以下数据结构中,()是非线性数据结构。

A.树 B.字符串 C.队 D.栈

16.设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。

A.线性表的顺序存储结构 B. 队列 C. 线性表的链式存储结构 D. 栈

17. 设指针变量p指向单链表结点A,则删除结点A的后继结点B需要的操作为()。

A.p->next=p->next->next B. p=p->next

C. p=p->next->next D.p->next=p

18. 数据结构中,与所使用的计算机无关的是数据的()结构。

A) 存储 B) 物理 C) 逻辑 D) 物理和存储

19. 向一个带头结点的栈顶指针为ls的链栈中插入一个s所指结点时,则执行()。

A)ls->next=s; B) s->next=ls->next;ls->next=s;

C) s->next=ls;ls=s; D) s->next=ls;ls=ls->next;

20. 对一个算法的评价,不包括如下( )方面的内容。

A.健壮性和可读性

B.并行性

C.正确性

D.时空复杂度

21.有六个元素6,5,4,3,2,1 的顺序进栈,下列哪一个不是合法的出栈序列()。

A.5 4 3 6 1 2

B.4 5 3 1 2 6

C.3 4 6 5 2 1

D.2 3 4 1 5 6

22. 设数组A[0‥M-1]作为循环队列Q的存储空间,f为头指针,r为尾指针,删除队头元素的语句为()。

A.f=f+1

B.f=(r+1) % M

C.f=(f+1) % M

D.f=(f+1) % (M+1)

23. 以下数据结构中,()是非线性数据结构。

A.树

B.字符串

C.队

D.栈

24.下面关于线性表的叙述中,错误的是哪一个()。

A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

25. 在栈操作中,输入序列为A,B,C,D,不可能得到的输出序列是( )。

A.A,B,C,D

B.D,C,B,A

C.A,C,D,B

D.C,A,B,D

26. 链栈与顺序栈相比有一个明显的优点,即()。

A.占用存储空间更少

B.通常不会出现栈满的情况

C.不会出现栈空的情况

D.程序执行速度更

27. 对线性表,在下列哪种情况下应当采用链表表示()。

A.经常需要随机的存取元素

B.经常需要插入删除操作

C.表中元素需要占据一片连续的存储空间

D.表中元素个数不变

28. 下列程序段的时间复杂度为()。

for(i=0; i

for(j=0; j

c[i][j]=0;

for(i=0; i

for(j=0; j

for(k=0; k

c[i][j]=c[i][j]+a[i][k]*b[k][j];

(A) O(m*n*t) (B) O(m+n+t) (C) O(m+n*t) (D) O(m*t+n)

29.设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动()个元素。

(A) n-i (B) n+l -i (C) n-1-i (D) i

30. 设指针变量p指向双向链表中结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X

的操作序列为()。

(A) p->next=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;

31. 设输入序列1、2、3、…、n经过栈作用后,输出序列中的第一个元素是n,则输出序列中的第i个输

出元素是()。

(A) n-i (B) n-1-i (C) n+l -i (D) 不能确定

三、填空

1.四类基本逻辑结构是集合、()、()、图状结构。

2.顺序存储结构是通过()表示元素之间的关系的;链式存储结构是通()表示元素之间的关系的。3.仅允许在表的一端进行插入和删除运算的线性表被称为()。

4.有一在顺序队列中做入队运算时,应先判别队列是否();在做出队运算时,应先判别队列是否()。

5.不含头结点的单链表,头指针为head,则判断其为空的条件为()。

6.栈和队列是运算()的线性表。

7. 假设带头结点的非空单循环链表中仅设尾指针L,则在第1个数据元素结点之前插入指针s所指结点的语句依次是;。

8.无表头结点的链队列Q为空的条件是。

9. 表长为n的顺序表中插入元素平均移动的次数为。

10. 在一个长度为n的单链表L中,删除链表中p所指结点的后继结点的时间复杂度为。11.约定栈S的进栈序列为p1,p2,p3……pn,如果第一个出栈元素为pn,则第i个出栈元素为。12.假设为循环队列分配的向量空间为Q[20],若队列的长度和队头指针值分别为13和17,则当前尾指针的值为。

13. 设顺序循环队列Q[0:m-1]的队头指针和队尾指针分别为F和R,其中队头指针F指向当前队头元素的前一个位置,队尾指针R指向当前队尾元素所在的位置,则出队列的语句为F = 。

14. 计算机执行下面的语句时,语句s的执行次数为。

for(i=l;i<=n-l;i++)

for(j=1;j>=i;j--)

s;

15. 长度为n的顺序表,删除元素平均移动的次数为。

16. 在顺序表中访问任意一结点的时间复杂度均为(),因此,顺序表是一种()存取的数据结构。17.在单链表中,除了首结点外,任一结点的存储位置由()指示。

18. 设循环队列空间n=40,队尾指针rear=6,队头指针front=25,则此循环队列中当前元素的数目是()。

19. 在下面的程序段中,对x赋值的语句的频度为()(表示为n的函数)

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

x=x+1;

20. 在做进栈运算时应先判别栈是否();在作退栈运算时应先判别栈是否( );当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( )。为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的空间时,应将两栈的( )分别设在内存空间的两端,这样只有当( )时才产生溢出。

21. .在双向链表中,每个结点都有两个指针域,一个指向(),另一个指向()。

22. 循环队列的引入,是为了克服()。

23. 若有一个大小为6的数组来实现循环队列,且当前的rear和front的值为0和3,当从队列中删除1

个元素后,front的值为,再加2个元素后,rear的值为。

四、应用题

1.简述顺序表和链表存储方式的特点。

2. 简要叙述循环队列的数据结构,并写出其初始状态、队列空、队列满时的队首指针与队尾指针的值。

3. 对线性表的单链表,循环链表,双向链表三种存储结构的进行描述,并给出它们的区别。

五、算法设计

1.设有一个由正整数组成的无序单链表,编写完成下列功能的算法:

(1)找出最大值结点,且打印该数值;

(2)若该数值是偶数,则将其与直接后继结点的数值交换;

单链表类型描述:

typedef struct Node

{ ElemType data;

struct Node * next;

}Node, *LinkList;

2. 假设以带头结点的单链表表示非递减有序表,设计一算法删除表中所有值大于min且小于max(假设min

3. 设计在单链表中删除值相同的多余结点的算法。

4. 在带头结点的单链表head的结点a之后插入新元素x。

5. 假设有一个带头结点的循环链表L的长度大于1,试编写算法在此链表中删除尾结点。

链表类型描述:

typedef struct Node

{ ElemType data;

struct Node * next;

}Node, *LinkList;

6. 设头指针为head,编写算法实现带头结点的单链表head的就地逆置,即利用原带头结点的单链表 head 的结点空间把数据元素序列(a1,a2,……a n)逆置为(a n,a n-1,……,a1)

单链表类型描述:

typedef struct Node

{ ElemType data;

struct Node * next;

}Node, *LinkList;

7. 设顺序表L中的数据元素递减有序,编写一个算法,将数据元素x插入到顺序表L的适当位置上,以保持该顺序表的有序性。

顺序表的类型描述:

#define MAXSIZE 线性表可能达到的最大长度;

typedef struct

{ ElemType elem[MAXSIZE]; /* 线性表占用的数组空间。*/

int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/

} SeqList;

8. 设单链表head中的数据元素递增有序,编写一个算法,将数据元素x插入到单链表中的适当位置上,

以保持该链表的有序性。

单链表类型描述:

typedef struct Node

{ ElemType data;

struct Node * next;

}Node, *LinkList;

数据结构实验

实验2 查找算法的实现和应用?实验目的 1. 熟练掌握静态查找表的查找方法; 2. 熟练掌握动态查找表的查找方法; 3. 掌握hash表的技术. ?实验内容 1.用二分查找法对查找表进行查找; 2.建立二叉排序树并对该树进行查找; 3.确定hash函数及冲突处理方法,建立一个hash表并实现查找。 程序代码 #include using namespace std; int main() { int arraay[10]={1,2,3,4,5,6,7,8,9,10}; int binary_search(int a[10],int t); cout<<"Enter the target:"; int target; cin>>target; binary_search(arraay,target); return 0; } int binary_search(int a[10],int t) { int bottom=0,top=9; while(bottom

cout<<"Not present!"; } return 0; } 结果 二叉排序树 #include #include #include using namespace std; typedef int keyType; typedef struct Node { keyType key; struct Node* left; struct Node* right; struct Node* parent; }Node,*PNode; void inseart(PNode* root, keyType key) { PNode p = (PNode)malloc(sizeof(Node)); p -> key = key;

数据结构 第二章自测题答案

第2章自测卷答案姓名班级 一、填空(每空1分,共13分) 1. 【严题集 2.2①】在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。 2. 线性表中结点的集合是有限的,结点间的关系是一对一的。 3. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1 个元素。 4. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动n-i 个元素。 5. 在顺序表中访问任意一结点的时间复杂度均为O(1),因此,顺序表也称为随机存取的数据结构。 6. 【严题集2.2①】顺序表中逻辑上相邻的元素的物理位置必定相邻。单链表中逻辑上相邻的元素的物理位置不一定相邻。 7. 【严题集2.2①】在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的值指示。 8.在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。 二、判断正误(在正确的说法后面打勾,反之打叉)(每小题1分,共10分)(×)1. 链表的每个结点中都恰好包含一个指针。 答:错误。链表中的结点可含多个指针域,分别存放多个指针。 例如,双向链表中的结点可以含有两个指针域,分别存放指向其 直接前趋和直接后继结点的指针。 (×)2. 链表的物理存储结构具有同链表一样的顺序。 错,链表的存储结构特点是无序,而链表的示意图有序。 (×)3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。 错,链表的结点不会移动,只是指针内容改变。 (×)4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。 错,混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序 表,也能存放记录型数据。 (×)5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

数据结构实验一 实验报告

班级::学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验容 定义一个包含学生信息(学号,,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2

typedef int Status; // 定义函数返回值类型 typedef struct { char num[10]; // 学号 char name[20]; // double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK;

数据结构——线性表自测题答案

第2章答案 一、填空 1.在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。 2. 线性表中结点的集合是有限的,结点间的关系是一对一的。 3. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1 个元素。 4. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动n-i 个元素。 5. 在顺序表中访问任意一结点的时间复杂度均为O(1),因此,顺序表也称为随机存取的数据结构。 6.顺序表中逻辑上相邻的元素的物理位置必定相邻。单链表中逻辑上相邻的元素的物理位置不一定相邻。 7.在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的值指示。 8.在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。 二、判断正误(在正确的说法后面打勾,反之打叉) (×)1. 链表的每个结点中都恰好包含一个指针。 答:错误。链表中的结点可含多个指针域,分别存放多个指针。例如,双向链表中的结点可以含有两个指针 域,分别存放指向其直接前趋和直接后继结点的指针。 (×)2. 链表的物理存储结构具有同链表一样的顺序。错,链表的存储结构特点是无序,而链表的示意图有序。(×)3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。错,链表的结点不会移动,只是指针内容改变。 (×)4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。 错,混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。 (×)5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。 错,正好说反了。顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜” (×)6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。 错,前一半正确,但后一半说法错误,那是链式存储的优点。顺序存储方式插入、删除运算效率较低, 在表长为n的顺序表中,插入和删除一个数据元素,平均需移动表长一半个数的数据元素。 (×)7. 线性表在物理存储空间中也一定是连续的。 错,线性表有两种存储方式,顺序存储和链式存储。后者不要求连续存放。 (×)8. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。 错误。线性表有两种存储方式,在顺序存储时,逻辑上相邻的元素在存储的物理位置次序上也相邻。(×)9. 顺序存储方式只能用于存储线性结构。 错误。顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于 非线性结构,但其最佳存储方式是顺序存储方式。(后一节介绍) (×)10. 线性表的逻辑顺序与存储顺序总是一致的。 错,理由同7。链式存储就无需一致。 三、单项选择题

数据结构实验报告

姓名: 学号: 班级: 2010年12月15日

实验一线性表的应用 【实验目的】 1、熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。、; 2、以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3、掌握线性表的动态分配顺序存储结构的定义和基本操作的实现; 4、通过本章实验帮助学生加深对C语言的使用(特别是函数的参数调用、指针类型的 应用和链表的建立等各种基本操作)。 【实验内容】 约瑟夫问题的实现:n只猴子要选猴王,所有的猴子按1,2,…,n编号围坐一圈,从第一号开始按1,2…,m报数,凡报到m号的猴子退出圈外,如此次循环报数,知道圈内剩下一只猴子时,这个猴子就是猴王。编写一个程序实现上述过程,n和m由键盘输入。【实验要求】 1、要求用顺序表和链表分别实现约瑟夫问题。 2、独立完成,严禁抄袭。 3、上的实验报告有如下部分组成: ①实验名称 ②实验目的 ③实验内容:问题描述:数据描述:算法描述:程序清单:测试数据 算法: #include #include typedef struct LPeople { int num; struct LPeople *next; }peo; void Joseph(int n,int m) //用循环链表实现 { int i,j; peo *p,*q,*head; head=p=q=(peo *)malloc(sizeof(peo)); p->num=0;p->next=head; for(i=1;inum=i;q->next=p;p->next=head; } q=p;p=p->next; i=0;j=1; while(i

数据结构实验

长春大学计算机学院网络工程专业 数据结构实验报告 实验名称:实验二栈和队列的操作与应用 班级:网络14406 姓名:李奎学号:041440624 实验地点:日期: 一、实验目的: 1.熟练掌握栈和队列的特点。 2.掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用。 3.掌握链队的入队和出队等基本操作。 4.加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力。 二、实验内容、要求和环境: 注:将完成的实验报告重命名为:班级+学号+姓名+(实验二),(如:041340538张三(实验二)),发邮件到:ccujsjzl@https://www.doczj.com/doc/437672172.html,。提交时限:本次实验后24小时之内。 阅读程序,完成填空,并上机运行调试。 1、顺序栈,对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 (1)文件SqStackDef. h 中实现了栈的顺序存储表示 #define STACK_INIT_SIZE 10 /* 存储空间初始分配量*/ #define STACKINCREMENT 2 /* 存储空间分配增量*/ typedef struct SqStack { SElemType *base; /* 在栈构造之前和销毁之后,base 的值为NULL */ SElemType *top; /* 栈顶指针*/ int stacksize; /* 当前已分配的存储空间,以元素为单位*/ }SqStack; /* 顺序栈*/ (2)文件SqStackAlgo.h 中实现顺序栈的基本操作(存储结构由SqStackDef.h 定义) Status InitStack(SqStack &S) { /* 构造一个空栈S */ S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); /* 存储分配失败*/ S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; } int StackLength(SqStack S) { // 返回S 的元素个数,即栈的长度, 编写此函数

数据结构自测题(1)

第十一章文件 一、选择题 1. 散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址,因为散列函数是一对一的关系,则选择好的()方法是散列文件的关键。【哈尔滨工业大学 2001二、5 (2分)】 A. 散列函数 B. 除余法中的质数 C. 冲突处理 D. 散列函数和冲突处理 2. 顺序文件采用顺序结构实现文件的存储,对大型的顺序文件的少量修改,要求重新复制整个文件,代价很高,采用()的方法可降低所需的代价。【北京邮电大学 2000 二、8 (20/8分)】 A. 附加文件 B. 按关键字大小排序 C. 按记录输入先后排序 D. 连续排序 3. 用ISAM组织文件适合于()。【中科院软件所 1998】 A.磁带 B.磁盘 4.下述文件中适合于磁带存储的是()。【中科院计算所 2000 一、7(2分)】 A. 顺序文件 B. 索引文件 C. 散列文件 D. 多关键字文件 5. 用ISAM和VSAM组织文件属于()。 A. 顺序文件 B. 索引文件 C. 散列文件

【中国科技大学 1998 二、5(2分)中科院计算所 1998 二、5(2分)】 6. ISAM文件和VASM文件属于()。【山东大学 2001 二、5 (1分)】 A. 索引非顺序文件 B. 索引顺序文件 C. 顺序文件 D. 散列文件 7. B+树应用在( )文件系统中。【北京邮电大学 2001 一、1(2分)】 A. ISAM B. VSAM 二、判断题 1. 文件是记录的集合,每个记录由一个或多个数据项组成,因而一个文件可看作由多个记录组成的数据结构。【长沙铁道学院 1998 一、5 (1分)】 2. 倒排文件是对次关键字建立索引。【南京航空航天大学 1997 一、10(1分)】 3. 倒排序文件的优点是维护简单。【南京航空航天大学 1995 五、10(1分)】 【西安交通大学 1996 二、6 (3分)】 4. 倒排文件与多重表文件的次关键字索引结构是不同的。 5. Hash表与Hash文件的唯一区别是Hash文件引入了‘桶’的概念。【南京航空航天大学1996六10(1分)】 6. 文件系统采用索引结构是为了节省存储空间。【北京邮电大学 2000 一、10 (1分)】

数据结构实验1

《数据结构》实验报告 实验序号:1 实验项目名称:概论

附源程序清单: 1. #include void main() { int i; int num[10]; int *p; for(i=0;i<=9;i++) num[i]=i+1; for(p=(num+9);p>=(num+0);p--) printf("%d ",*p); printf("\n"); }

2. #include void main() { void swap(int *a,int *b); int i; int a[10]; int *p,*max,*min; for(i=0;i<10;i++) scanf("%d",&a[i]); max=min=a; for(i=0;i<10;i++) { if(*maxa[i]) min=&a[i]; } p=a; swap(p,max); swap((p+9),min); for(p=a;p<=(a+9);p++) printf("%d ",*p); printf("\n"); } void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } 3. #include #include #include #include typedef struct { char num[5]; char name[20]; float score1; float score2; float score3; float average;

数据结构自测题及解答

一、概念题(每空0.5分,共28分) 1.树(及一切树形结构)是一种“________”结构。在树上,________结点没有直接前趋。对树上任一结点X来说,X是它的任一子树的根结点惟一的________。 2.由3个结点所构成的二叉树有种形态。 3.一棵深度为6的满二叉树有个分支结点和个叶子。 4.一棵具有257个结点的完全二叉树,它的深度为。 5.二叉树第i(i>=1)层上至多有______个结点;深度为k(k>=1)的二叉树至多有______个结点。6.对任何二叉树,若度为2的节点数为n2,则叶子数n0=______。 7.满二叉树上各层的节点数已达到了二叉树可以容纳的______。满二叉树也是______二叉树,但反之不然。 8.设一棵完全二叉树有700个结点,则共有个叶子结点。 9.设一棵完全二叉树具有1000个结点,则此完全二叉树有个叶子结点,有个度为2的结点,有个结点只有非空左子树,有个结点只有非空右子树。 10.一棵含有n个结点的k叉树,可能达到的最大深度为,最小深度为。 11.二叉树的基本组成部分是:根(N)、左子树(L)和右子树(R)。因而二叉树的遍历次序有六种。最常用的是三种:前序法(即按N L R次序),后序法(即按次序)和中序法(也称对称序法,即按L N R次序)。这三种方法相互之间有关联。若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是。 12.中序遍历的递归算法平均空间复杂度为。 13.二叉树通常有______存储结构和______存储结构两类存储结构。 14.如果将一棵有n个结点的完全二叉树按层编号,则对任一编号为i(1<=i<=n)的结点X有: (1)若i=1,则结点X是______;若i〉1,则X的双亲PARENT(X)的编号为______。 (2)若2i>n,则结点X无______且无______;否则,X的左孩子LCHILD(X)的编号为______。 (3)若2i+1>n,则结点X无______;否则,X的右孩子RCHILD(X)的编号为______。 15.每个二叉链表的访问只能从______结点的指针,该指针具有标识二叉链表的作用。 16.二叉链表中每个存储结点的每个指针域必须有一个值,这个值或者是____________的指针,或者是______。 17.具有n个结点的二叉树中,一共有________个指针域,其中只有________个用来指向结点的左 右孩子,其余的________个指针域为NULL。 18.二叉树有不同的链式存储结构,其中最常用的是________与________。 19.若二叉树的一个叶子是某子树的中根遍历序列中的第一个结点,则它必是该子树的后根遍历序列中的________个结点。 20.树与二叉树之间最主要的差别是:二叉树中各结点的子树要区分为________和________,即使在结点只有一棵子树的情况下,也要明确指出该子树是________还是________。 21.树的结点数目至少为________,二叉树的结点数目至少为________。 22.树的主要遍历方法有________、________、________等三种。 23.由________转换成二叉树时,其根结点的右子树总是空的。 24.哈夫曼(Huffman)树是带权路径长度________的树,通常权值较大的结点离根________。 25.用5个权值{3, 2, 4, 5, 1}构造的哈夫曼(Huffman)树的带权路径长度是。 26. n个结点的线索二叉树中的线索数目为。 27.用数组[1..n]存放d堆,对于位于i的节点项,其父节点为;子节点为。 二、选择题(每空1分,共15分) ()1.不含任何结点的空树。 (A)是一棵树; (B)是一棵二叉树; (C)是一棵树也是一棵二叉树; (D)既不是树也不是二叉树

数据结构 _实验1

《数据结构》实验报告 班级:网络1311 学号:10 姓名:曾梦成绩: 实验1:指针和结构体程序设计 1.实验目的 (1)复习C(或C++)语言的基本描述方法。 (2)熟练掌握数组的用法。 (3)提高运用C(或C++)语言解决实际问题的能力。 2.实验内容 设一个班有10个学生,每个学生有学号,以及数学、物理、英语、语文、体育5门课的成绩信息。分别写3个函数以实现以下3个要求: (1)求数学的平均成绩。 (2)对于有两门以上课程不及格的学生,输出他们的学号、各门课成绩及平均成绩。 (3)输出成绩优良的学生(平均成绩在85分以上或全部成绩在80分以上)的学号、各门课成绩和平均成绩。 3.实验要求 (1)利用C(或C++)语言完成程序设计。 (2)上机调试通过实验程序。 (3)输出10个学生的学号和数学、物理、英语、语文、体育5门课的成绩,检验程序运行的正确性。 (4)总结整个程序的组成和设计思想。 (5)撰写实验报告(把输入数据及运行结果用抓图的形式粘贴到实验报告上)。 4.实验程序 #include struct STUDENT { char id[10]; int score[5]; double ave; }stu[10]; void main() { int i,j,math=0,m=0,n=0,k,Tave,num=10; double mave;

printf("成绩输入按照数学物理英语语文体育的顺序"); for(i=0;i

数据结构第1阶段练习题

第一阶段练习题 考试科目:《数据结构》第一章至第四章(总分100分) ______________学习中心(教学点)批次:层次: 专业:学号:身份证号: 姓名:得分: 一、选择题(每题3分,共30分) 1、在树形结构中,数据元素间存在()的关系。 A、一对一B、一对多C、多对多D、除同属一个集合外别无关系 2、下列说法中错误的是()。 A、数据对象是数据的子集 B、数据元素间关系在计算机中的映象即为数据的存储结构 C、非顺序映象的特点是借助指示元素存储地址的指针来表示数据元素间逻辑关系 D、抽象数据类型指一个数学模型及定义在该模型上的一组操作 3、下列不属算法特性的是()。 A、有穷性B、确定性C、零或多个输入D、健壮性 4、在长为n的顺序表中删除一个数据元素,平均需移动()个数据元素。 A、n B、n-1 C、n/2 D、(n-1)/2 5、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。 A、顺序表B、双链表C、带头结点的双向循环链表D、单循环链表 6、在一个可存放n个数据元素的顺序栈中,假设以高地址端为栈底,以top为栈顶指针,当向栈中压入一个数据元素时,top的变化是()。 A、不变B、top=n C、top++ D、top-- 7、设在一不带头结点的链队列中,front和rear分别为其队头和队尾指针,则删除一个结点的操作是()。 A、rear=front->next B、rear=rear->next C、front=front->next D、front=rear->next 8、判定一个栈顶指针为S且不带头结点的链栈为空栈的条件是()。 A、S B、S->next C、S->next==NULL D、!S 9、设在一不带头结点的链队列中,front和rear分别为其队头和队尾指针,则判定该队中只有一个结点的条件是()。 A、front->next B、rear->next C、front==rear D、front!=rear 10、串的长度是指()。

数据结构实验一 实验报告

班级: 姓名: 学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入与删除等。 二、实验内容 定义一个包含学生信息(学号,姓名,成绩)的顺序表与链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号与成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; // 定义函数返回值类型 typedef struct

{ char num[10]; // 学号 char name[20]; // 姓名 double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK; } Status GetElem(LinkList L,int i,ElemType &e) // 访问链表,找到i位置的数据域,返回给 e { LinkList p; p=L->next;

数据结构(第1,2章)自测题

《数据结构》第一、二章自测题 一、选择题 1 .计算机算法必须具备输入、输出和( )等5个特性。 A.可行性、可移植性和可扩充性B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性D.易读性、稳定性和安全性 2.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:()。 A.p->next=s;s->next=p->next; B.p->next=s->next;p->next=s; C.p->next=s;p->next=s->next; D.s->next=p->next;p->next=s; 3.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。A. 单链表 B.单循环链表 C. 带头结点的双循环链表 D.带尾指针的单循环链表 4.从逻辑上来分,数据结构可以分为()两大类。 A. 动态结构、静态结构 B.顺序结构、链式结构 C. 线性结构、非线性结构 D.初等结构、构造型结构 5.算法分析的两个主要方面是:() A.空间复杂性和时间复杂性 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 6. 计算机算法指的是:() A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 7. 一个顺序表由(a0,a1,a2,…a n-1)n个元素构成,a0存储地址是100,每个元素的长度为2,则a4元素的地址是() A.110 B.108 C.100 D.120 8.向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。 A.8 B.63.5 C.63 D.7 9.线性表L在( )情况下适用于使用链式结构实现。 A.需经常修改L中的结点值B.需不断对L进行删除插入 C.L中含有大量的结点D.L中结点结构复杂 10.在一个以 h 为头的单循环链中,p 指针指向链尾的条件是() A. p->next=h B. p->next=NULL C. p->next->next=h D. p->data=-1 11. 对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是()A.head==NULL B.head→next==NULL C.head→next==head D.head!=NULL 12. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址( ) A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续或不连续都可以

数据结构实验报告及心得体会

2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨

实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。

三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } for(i=0;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1;

数据结构实验1

天津科技大学 2015—2016学年第2学期数据结构实验任务书 课程名称:数据结构实验学时: 2 实验题目:线性表的基本操作 实验环境: Visual C++ 实验目的: 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 实验内容: 定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 实验提示: 学生信息的定义: typedef struct { char no[8]; //8位学号 char name[20]; //姓名 int score; //成绩 }Student; 顺序表的定义 typedef struct { Student *elem; //指向数据元素的基地址 int length; //线性表的当前长度 }SqList; 链表的定义:

typedef struct LNode{ Student data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; 实验要求: (1) 程序要添加适当的注释,程序的书写要采用缩进格式。 (2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。 (3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。 (4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。 (5) 以班为单位实验周周五上传源程序和实验报告。顺序表的源程序保存为SqList.cpp,链表的源程序保存为LinkList.cpp,实验报告命名为:实验报告1.doc。源程序和实验报告压缩为一个文件(如果定义了头文件则一起压缩),按以下方式命名:学号姓名.rar,如07081211薛力.rar。

数据结构练习题(含答案)

数据结构练习题 习题1 绪论 1.1 单项选择题 1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的①、数据信息在计算机中的②以及一组相关的运算等的课程。 ① A.操作对象B.计算方法C.逻辑结构D.数据映象 ② A.存储结构B.关系C.运算D.算法 2. 数据结构DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是①的有限集合,R是D上的②有限集合。 ① A.算法B.数据元素C.数据操作D.数据对象 ② A.操作B.映象C.存储D.关系 3. 在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.部结构和外部结构 4. 算法分析的目的是①,算法分析的两个主要方面是②。 ① A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 ② A. 空间复杂性和时间复杂性 B. 正确性和简明性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 5. 计算机算法指的是①,它必具备输入、输出和②等五个特性。 ① A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 ② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 1.2 填空题(将正确的答案填在相应的空中) 1. 数据逻辑结构包括、和三种类型,树形结构和图形结构合称为。 2. 在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。 3. 在树形结构中,树根结点没有结点,其余每个结点有且只有个直接前驱结点,叶子结点没有结点,其余每个结点的直接后续结点可以。 4. 在图形结构中,每个结点的前驱结点数和后续结点数可以。 5. 线性结构中元素之间存在关系,树形结构中元素之间存在关系,图形结构中元素之间存在关系。 6. 算法的五个重要特性是__ __ , __ __ , ___ _ , __ __ , _ ___。 7. 分析下面算法(程序段),给出最大语句频度,该算法的时间复杂度是__ __。 for (i=0;i

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

数据结构自测题

数据结构自测题 1、算法的计算量的大小称为计算的()。 A. 效率 B. 复杂性 C. 现实性 D. 难度 2、一个算法应该是()。 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 3、下面说法错误的是() (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B. (1), (2) C. (1), (4) D. (3) 4、在数据结构中,从逻辑上可以将之分为()。 A. 动态结构和静态结构 B. 紧凑结构和非紧凑结构 C. 内部结构和外部结构 D. 线性结构和非线性结构 5、计算算法的时间复杂度是属于一种()。 A. 事前统计的方法 B. 事前分析估算的方法 C. 事后统计的方法 D. 事后分析估算的方法 6、可以用()定义一个完整的数据结构: A. 数据元素 B. 数据对象 C. 数据关系 D. 抽象数据类型

7、算法分析的目的是_______。 A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 8、设计一个“好”的算法应考虑达到的目标有______。 A. 是可行的 B. 是健壮的 C. 无二义性 D. 可读性好 线性表 1、线性表是具有n个()的有限序列(n>0)。 A.表元素 B.字符 C.数据元素 D.数据项 2、若线性表最常用的操作是存取第I个元素及其前驱和后继元素的值,为节省时间应采用的存储方式()。 A.单链表 B.双向链表 C.单循环链表 D.顺序表 3、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。 A. 单链表 B. 仅有头指针的单循环链表 C. 双链表 D. 仅有尾指针的单循环链表 4、设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用()最节省时间。 A. 带头结点的双循环链表 B. 单循环链表 C. 带尾指针的单循环链表 D. 单链表

相关主题
文本预览
相关文档 最新文档