数据结构复习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构
一、填空题
1.线性表中除去第一个元素和最后一个元素,每一个元素都有一个直接前驱和一个直接后继,线性表的长度是指线性表中元素个数。
2.在一个链表中,如果每个结点只有一个指针域,则称为线性单链表;如果每个结点含有指向其前驱和后继的两个指针域,则称为双向链表;若线性链表中最后一个结点的next(指针域)指向头结点,则称为循环链表。
3. 带头结点的单向链表中,若在指针p所指向的结点后面插入指针s所指向的结点,应进行的操作为s->next=p->next; p->next=s;;
4.带头结点的单向链表中,若要删除指针p所指向的结点后面的结点,应进行的操作应为q=p->next; p->next=q->next; free(q);。
5.双向链表中,指针p所指向的结点既不是第一个结点也不是最后一个结点,在p之前插入指针t所指向的结点的操作为t->prior=p->prior; p->prior->next=t; t->next=p; p->prior=t;;
6.双向链表中,删除p后面的结的操作为q=p->next; q->next->prior=p;p->next=q->next; free(q);。
7.四种基本的数据结构分别是集合、线性、树、图。研究数据结构是从数据元素、关系、操作三个方面进行的。ADT只考虑数学模型上数据元素之间的逻辑结构,而忽略其物理结构。
8.要从一个顺序表中删除一个元素时,被删除元素之后的所有元素平均需往前挪一个位置,移动过程是从被删除元素后面一个元素开始依次移动,删除一个元素平均需要移动n/2个元素。
9.在一个有n个结点的单链表中,删除指针p所指向的结点后面的结点的时间复杂度为O(1),删除指针p所指向的结点的时间复杂度为O(n)。
10.栈和队列是运算受限的线性表。栈的操作原则是后进先出,队列的操作原则是先进先出。
11.如果一个栈采用以下结构,则栈空应满足条件S.base==S.top,栈满应满足条件S.top-S.base>=S. stacksize。typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
SqStack S;
12.请叙述算法ttt的功能利用栈将队列元素逆置。
void ttt(Queue &Q)
{Stack S; int d;
InitStack(S);
while(!QueueEmpty(Q)) {DeQueue(Q,d); Push(S,d); }
while(!StackEmpty(S)) {Pop(S,d); Enqueue(Q,d); }
}
13. 一个顺序结构的循环队列队空的条件是Q.front==Q.rear。
14. 在具有n个单元的循环队列中,队满时共有n-1个元素。
15. 向量、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。
16.设数组int array[10][20][30]按行序存放,数组的首地址为100,每个数组元素占2个字节,则数组元素array[8][9][10]的地址为10260,整个数组需占用12000个字节。 100+(8×20×30+9×30+10)×2 = 10260 17.广义表L = ((a), ((b), c) , (((d))))的表头是(a),表尾是(((b),c),(((d)))),利用广义表的基本操作(GetHead、GetTail)分离出原子b的表达式为GetHead(GetHead(GetHead(GetTail(L)))。
18.已知广义表LS=(a,(b,c,d),c),运用GetHead和GetTail函数取出原子d的运算是(GetHead
(GetTail(GetTail(GetHead(GetTail(LS))))))。
19. 三元组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
20. 用三元组表表示下列稀疏矩阵:
(1)三元组表:(2)三元组表:
21.一个n*n的对称矩阵,如果以行或列为主序存入内存,则其容量为n(n+1)/2
22.三维数组A[c1..d1,c2..d2,c3..d3]共有(d1-c1+1)*(d2-c2+1)*(d3-c3+1)个元素。
23.广义表(a , (a,b) , d , e , ((i,j),k) )的长度是5,深度是3
24.一棵深度为k的完全二叉树中最少有2k-1个结点,最多有2k-1个结点。
25. 一棵具有257个结点的完全二叉树,它的深度为9。
26. 一棵深度为6的满二叉树有2 6-1 =32个叶子结点和31个分支结点。
27. 有n个叶子结点的哈夫曼树中一共有n+(n-1)=2n-1个结点。
28.在一棵完全二叉树上编号为k的结点的双亲编号是k/2如果有左孩子,左孩子的编号是2k 右孩子的编号是2k+1
29.包含n个结点的二叉链表,结点的2n个指针域中有n-1个非空指针、有n+1个空指针。
30.具有n个结点的满二叉树,其叶子结点的个数为(n+1)/2
31. 一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有2h-1结点。
32. 具有n个结点的哈夫曼树,其叶子结点的个数为(n+1)/2
33.图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。
34. 有向图G用邻接矩阵存储,其第i行的所有元素之和等于顶点i的出度。
35. 如果n个顶点的图是一个环,则它有n棵生成树。 //从每一个顶点出发,可以生成n棵生成树
36. n个顶点e条边的图,若采用邻接表存储,则空间复杂度为O(n+e)。
37. n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为O(n2)若采用邻接表存储时,该算法的时间复杂度为O(n+e)。
38. 一个有n个顶点的有向图中,最多有n(n-1)弧。
39. 若要求一个稀疏图G的最小生成树,最好用克鲁斯卡尔算法来求解。
40. 若要求一个稠密图G的最小生成树,最好用Prim算法来求解。
二、选择题
1.在双向链表中,在p所指的结点后面插入s结点的操作是 D 。
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
2.若线性表最常用的操作是存取第i个元素及其前驱的值,则采用 D 存储方式节省时间。
A)单链表B)双向链表C)单循环链表D)顺序表