出自:安阳师范学院-计算机应用技术-数据结构

假设循环队列的元素存储空间大小为m,队头指针f指向队头元素,队尾指针r指向队尾元素的下一个位置,则在少用一个元素空间的前提下,表示“队满”的条件是___。
栈顶的位置是随着______ 操作而变化的。设栈S的初始状态为空,若元素a、b、c、d、e、f依次进栈,得到的出栈序列是b、d、c、f、e、a,则栈S的容量至少是___。
栈下溢是指在____时进行出栈操作。
已知循环队列的存储空间大小为m,队头指针front指向队头元素,队尾指针rear指向队尾元素的下一个位置,则在队列不满的情况下,队列的长度是___。
假设为循环队列分配的向量空间为Q[20],若队列的长度和队头指针值分别为13和17,则当前尾指针的值为______。
若进栈序列为a,b,c,且进栈和出栈可以穿插进行,则可能出现____个不同的出栈序列。
简述队列和栈这两种数据类型的相同点和差异点。
假设以数组seqn[m]存放循环队列的元素,设变量rear和quelen分别指示循环队列中队尾元素的位置和元素的个数。 (1)写出队满的条件表达式; (2)写出队空的条件表达式; (3)设m=40,rear=13,quelen=19,求队头元素的位置; (4)写出一般情况下队头元素位置的表达式。
阅读下列算法,并回答问题: (1)Q、Q1和Q2都是队列结构,设队列Q=(1,0,-5,2,-4,-6,9),其中1为队头元素,写出执行f31 (&Q,&Q1,&Q2)之后队列Q、Q1和Q2的状态; (2)简述算法f31的功能。 (注:lnitQueue、EnQueue、DeQueue和QueueEmpty分别是队列初始化、入列、出队和判队空的操作) void f31 (Queue*Q, Queue*Q1, Queue*Q2) { int e; lnitQueue (Q1); lnitQueue (Q2); while (!QueueEmpty (Q)) { e=DeQueue (Q); if (e>=0) EnQueue (Q1,e); else EnQueue (Q2,e) } }
算法f31的功能是清空带头结点的链队列Q。请在空缺处填入合适的内容,使其成为一个完整的算法。 typedef struct node{ DataType data; struct node *next; }QueueNode; typedef struct { QueueNode *front;//队头指针 QueueNode *rear;//队尾指针 }LinkQueue; void f 31(LinkQueue*Q) { QueueNode*p,*s; p= (1) ; while(p!=NULL) { s=p; p=p->next; free (s); ________(2) =NULL; Q->rear=_______(3)_______; }
设栈S和队列Q的初始状态皆为空,元素a1,a2,a3,a4,a5和a6依次通过栈S,元素出栈后即进入队列Q,若6个元素出队列的顺序是a3,a5,a4,a6,a2,a1则栈S至少应该容纳_______个元素?
阅读下列程序,并回答问题: #include<stdio.h> substr(char*t,char*s,int pos,int len) { while(len>0&&*s) { *t=*(s+pos-l); t++;s++;len--; } *t=.\0.; } char *f31(char*s) { char t[100]; if (strlen(s)=1) return s; substr(t,s,1,1); substr(s,s,2,strlen(s)-1); f31(s); return strcat(s,t); } main( ) { char str[100]= ..String..; printf(..%s\n..,f31(str)); } (1)请写出执行该程序后的输出结果; (2)简述函数f31的功能。
空格串是指 空格字符(ASCII码为20H)组成的串,而空串是 任何字符的串,其长度为0。
串是一种特殊的线性表,其特殊性体现在它的数据元素是 ,另外串的基本操作和线性表有很多的区别,在串的基本操作中,通常以“ ”作为操作对象。
已知substr(s,i,len)函数的功能是返回串s中第i个字符开始长度为len的子串,strlen(s)函数的功能是返回串s的长度。若s=″ABCDEFGHIJK″,t=″ABCD″,执行运算substr(s,strlen(t), strlen(t))后的返回值是___________。
在串匹配中,一般将主串称为目标串,将子串称为_______。链串的结点大小定义为结点的_________中存放的字符个数。
字符串“sgabacbadfgbacst” 中存在有 ____个与字符串“ba”相同的子串。在串S=“structure”中,以t为首字符的子串有 ________个。
特殊矩阵和稀疏矩阵哪一种采用压缩存储会失去随机存取的功能?为什么?
已知稀疏矩阵采用带行表的三元组表表示,其形式说明如下: #define MaxRow 100 //稀疏矩阵的最大行数 typedef struct { int i,j,v; //行号、列号、元素值 }TriTupleNode; typedef struct{ TriTupleNode data[MaxSize]; int RowTab[MaxRow+1]; //行表 int m,n,t; //矩阵的行数、列数和非零元个数 }RTriTupleTable; 下列算法f31的功能是,以行优先的顺序输入稀疏矩阵的非零元(行号、列号、元素值),建立稀疏矩阵的带行表的三元组表存储结构。请在空缺处填入合适内容,使其成为一个完整的算法。(注:矩阵的行、列下标均从1起计) void f31(RTriTupleTable *R) { int i,k; scanf(″%d %d %d″,&R->m,&R->n,&R->t); R->RowTab[1]=0; k=1; //k指示当前输入的非零元的行号 for(i=0; ① ;i++) { scanf(″%d %d %d″, ② , ③ ,&R->data[i].v); while(k<R->data[i].i) { ④ ; R->RowTab[k]=i; } } } ① ② ③ ④
阅读下列算法,并回答问题: (1)假设数组L[8]={3,0,5,1,6,4,2,7},写出执行函数调用f32(L,8)后的L; (2)写出上述函数调用过程中进行元素交换操作的总次数。 void f32(int R[],int n){ int i,t; for (i=0;i<n-1;i++) while (R[i]!=i){ t=R[R[i]]; R[R[i]]=R[i]; R[i]=t; } } (1) (2)
设二维数组A5X6的每个元素占4个字节,已知LOC(a00)=1000,A共占________个字节?A的终端结点a45的起始地址为__________?按行和按列优先存储时,a25的起始地址分别为___________和___________?
假设以列优先顺序存储二维数组A[5][8],其中元素A[0][0]的存储地址为LOC(a00),且每个元素占4个存储单元,则数组元素A[i][j]的存储地址为___________。
假设一个6阶的下三角矩阵B按列优先顺序压缩存储在一维数组A中,其中A[0]存储矩阵的第一个元素b11,则A[14]存储的元素是________。
假设一个10阶的下三角矩阵A按列优顺序压缩存储在一维数组C中,则C数组的大小应为___。假设以列优先顺序存储二维数组A[5][8],其中元素A[0][0]的存储地址为LOC(a00),且每个元素占4个存储单元,则数组元素A[i][j]的存储地址为_____ 。
已知广义表如下:A=(B,y) B=(x,L) L=(a,b) 要求:写出下列操作的结果 tail(A)=__. head(B)=__。
广义表和线性表的区别与联系是:广义表是 的推广;线性表的元素仅限于原子项,若允许其元素具有自身结构,即构成广义表。
广义表的“深度”是指一个广义表的“深度”是指表展开后所含括号的 ___________。
广义表L=(a,(b,( )))的深度为__。广义表G=(a,b,(c,d,(e,f)),G)的长度为__。
假设以有序对表示从双亲结点到孩子结点的一条边,若已知树中边的集合为{<a,b>,<a,d>,<a,c>,<c,e>,<c,f>,<c,g>,<c,h>,<e,i>,<e,j>,<g,k>},请回答下列问题: (1)哪个结点是根结点? (2)哪些结点是叶子结点? (3)哪些结点是k的祖先? (4)哪些结点是j的兄弟? (5)树的深度是多少?
假设通信电文使用的字符集为{a,b,c,d,e,f,g},字符的哈夫曼编码依次为:0110,10,110,111,00,0111和010。 (1)请根据哈夫曼编码画出此哈夫曼树,并在叶子结点中标注相应字符; (2)若这些字符在电文中出现的频度分别为:3,35,13,15,20,5和9,求该哈夫曼树的带权路径长度。
假设一棵完全二叉树含1000个结点,则其中度为2的结点数为___;在含有3个结点a,b,c的二叉树中,前序序列为abc且后序序列为cba的二叉树有___棵;
二叉树的四种遍历方法有___、___、___和___。
在n个结点的线索二叉链表中,有___个线索指针;已知完全二叉树T的第5层只有7个结点,则该树共有___个叶子结点;
假设用表示树的边(其中x是y的双亲),已知一棵树的边集为{<b,d>,<a,b>,<c,g>,<c,f>,<c,h>,<a,c>},该树的度是_____ 。
已知一棵完全二叉树中共有768结点,则该树中共有 _____个叶子结点。
假设二叉树的RNL遍历算法定义如下:若二叉树非空,则依次执行如下操作: (1)遍历右子树 (2)访问根节点; (3)遍历左子树 已知一棵二叉树如图所示,请给出其RNL遍历的结果序列。 A / \ / \ B C / / \ D F G
请根据下面哈夫曼树进行译码,写出原来的电文 由字符集{s,t,a,e,l}及其在电文中出现的频度构建的哈夫曼树如图所示,已知某段电文的哈夫曼编码为111000010100,请根据该哈夫曼树进行译码,写出原来的电文。 ○ 0 / \1 ○ ○ 0/ \1 0/ \1 t○ i○ ○ ○e 0 / \1 a○ ○s
由森林转换得到的对应二叉树如图所示,写出原森林中第三棵树的前序序列和后序序列 A / \ / \ B E / \ / \ L C F G / \ / K D H \ I / J
已知有向图G的定义如下: G=(V,E) V={a,b,c,d,e} E={<a,b>, <a,c>,<b,c>,<b,d>,<c,d>,<e,c>,<e,d>} (1)画出G的图形; (2)写出G的全部拓扑序列。 (1) (2)
若采用邻接矩阵结构存储具有n个顶点的图,则对该图进行广度优先遍历的算法时间复杂度为__;n个顶点且含有环路的无向连通图中,至少含有__条边;
若用邻接矩阵表示有向图,则顶点i的入度等于矩阵中_____。
求最小生成树的克鲁斯卡尔(Kruskal)算法耗用的时间与图中____的数目正相关;一个有n个顶点的无向连通图,最少有____条边;
在有向图中,以顶点v为终点的边的数目称为v的__;含n个顶点的无向连通图中至少含有___条边。
若采用邻接矩阵结构存储具有n个顶点的图,则对该图进行广度优先遍历的算法时间复杂度为________。n个顶点且含有环路的无向连通图中,至少含有_______ 条边。
若无向图G中有n个顶点m条边,采用邻接矩阵存储,则该矩阵中非0元素的个数为__;
已知关键字序列为(56,23,41,79,38,62,18),用散列函数H(key)=key%11将其散列到散列表HT[0..10]中,采用线性探测法处理冲突。请回答下列问题: (1)画出散列存储后的散列表: (2)求在等概率情况下查找成功的平均查找长度。
下面程序实现二分查找算法。 Typedef struct{ KeyType key; InfoType otherinfo; }SeqList[N+1]; int BinSearch(SeqList R, int n,KeyType K) { int low=1,high=n; while( (1) ){ mid=(1ow+high)/2; if( (2) ) return mid; if(R[mid].key>K) high=mid-1; else (3) ; } return O; } //BinSearch 请在空白处填写适当内容,使该程序功能完整。
在关键字序列(07,12,15,18,27,32,41,92)中用二分查找法查找和给定值92相等的关键字,请写出查找过程中依次和给定值“92”比较的关键字为18,_____,41,92。
对关键字序列(72,87,61,23,94,16,05,58)进行堆排序,使之按关键字递减次序排列。请写出排序过程中得到的初始堆和前三趟的序列状态。
已知待排记录的关键字序列为{25,96,11,63,57,78,44},请回答下列问题: (1)画出堆排序的初始堆(大根堆); (2)画出第二次重建堆之后的堆。