数据结构作业题及答案
数据结构作业及答案

第一章绪论一、选择题1.数据结构是一门研究非数值计算的程序设计问题中计算机的1以及它们之间的2和运算等的学科。
1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像2 A.结构 B.关系 C.运算 D.算法2.数据结构被形式地定义为(K, R),其中K是1的有限集,R是K上的2有限集。
1 A.算法 B.数据元素 C.数据操作 D.逻辑结构2 A.操作 B.映像 C.存储 D.关系3.在数据结构中,从逻辑上可以把数据结构分成。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4.线性结构的顺序存储结构是一种1的存储结构,线性表的链式存储结构是一种2的存储结构。
A.随机存取 B.顺序存取 C.索引存取 D.散列存取5.算法分析的目的是1,算法分析的两个主要方面其一是指2,其二是指正确性和简单性。
1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性2 A.空间复杂度和时间复杂度 B.研究算法中的输入和输出的关系C.可读性和文档性D.数据复杂性和程序复杂性k6.计算机算法指的是1,它必须具备输入、输出和2等5个特性。
1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。
A.正确 B.不正确8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。
A.必须连续的B.部分地址必须连续的C.一定是不续的D连续不连续都可以9.以下的叙述中,正确的是。
A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。
数据结构试题及答案(十套)

一、单选题(每题 2 分,共20分)1.对一个算法的评价,不包括如下(B )方面的内容。
A.健壮性和可读性B.并行性C.正确性D.时空复杂度2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )。
A. p->next=HL->next; HL->next=p;B. p->next=HL; HL=p;C. p->next=HL; p=HL;D. HL=p; p->next=HL;3.对线性表,在下列哪种情况下应当采用链表表示?( )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( C )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 35.AOV网是一种()。
A.有向图B.无向图C.无向无环图D.有向无环图6.采用开放定址法处理散列表的冲突时,其平均查找长度()。
A.低于链接法处理冲突 B. 高于链接法处理冲突C.与链接法处理冲突相同D.高于二分查找7.若需要利用形参直接访问实参时,应将形参变量说明为()参数。
A.值B.函数C.指针D.引用8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的()。
A.行号B.列号C.元素值D.非零元素个数9.快速排序在最坏情况下的时间复杂度为()。
A.O(log2n) B.O(nlog2n)C.0(n) D.0(n2)10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。
A. O(n)B. O(1)C. O(log2n)D. O(n2)二、运算题(每题 6 分,共24分)1.数据结构是指数据及其相互之间的______________。
当结点之间存在M对N (M:N)的联系时,称这种结构为_____________________。
数据结构作业题目答案

数据结构作业题⽬答案⼀、单择题1.栈和队列的共同特点是(A)。
A.只允许在端点处插⼊和删除元素B.都是先进后出C.都是先进先出D.没有共同点2.⼆叉树的第k层的结点数最多为(2的k-1次⽅)。
A.2k-1B.2K+1C.2K-1D. 2k-13.数据结构中,从逻辑上可以把数据结构分成(C)。
A.动态结构和静态结构B.进凑结构和⾮进凑结构C.线性结构和⾮线性结构D.内部结构和外部结构4.设⼆叉树的先序遍历序列和后序遍历序列正好相反,则该⼆树满⾜的条件是(全部是左⼦树或全部是右⼦树 CD )。
A.空或只有⼀个结点B.⾼度等于其结点数C.任⼀结点⽆左孩⼦D.任⼀结点⽆右孩⼦5.设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动( A )个元素。
A. n-iB. n+l -iC.n-1-iD. i6.判定⼀个栈ST(最多元素为m0)为空的条件是(B)。
A.ST→TOP!=0B.ST→TOP==0C.ST→TOP!=m0D.ST→TOP==m0B7. ⾮空的循环单链表head的尾结点(由P所指向)满⾜( C )。
A.p->next=NULLB.p=NULLC.p->next=headD.p=head8.在线性结构中,所有结点都有( B )个直接后继。
A.0B.0或1C.1D.不确定9.设数组A[m]作为循环队列sq的存储空间,front为队头指针,rear为队尾指针,则执⾏⼊队操作时修改指针的语句是。
A、sq.front=(sq.front+1)%mB、sq.front=(sq.front+1)%(m+1)C、sq.rear=(sq.rear+1)%mD、sq.rear=(sq.rear+1)%(m+1)⼆、填空题1.已知⼀棵⼆叉树的中序序列和后序序列分别为:DBGEACHF和DGEBHFCA,则该⼆叉树的前序序列是( ABDECFH )。
2.在( 循环 )链表中,从任何⼀结点出发都能访问到表中的所有结点。
数据结构习题参考答案

数据结构习题参考答案一、栈和队列1. 栈是一种具有后进先出(Last In First Out)特性的线性数据结构。
常用方法:- push(x): 将元素x压入栈顶;- pop(): 弹出栈顶元素;- top(): 返回栈顶元素;- isEmpty(): 判断栈是否为空;例题解答:(1)题目描述:使用栈实现队列的功能。
解答:使用两个栈,一个用于入队操作,一个用于出队操作。
入队操作:直接将元素压入入队栈中;出队操作:如果出队栈为空,则将入队栈的元素逐个弹出并压入出队栈,此时出队栈的栈顶元素即为要弹出的元素。
复杂度分析:入队操作的时间复杂度为O(1),出队操作的平均时间复杂度为O(1)。
(2)题目描述:判断括号序列是否合法,即括号是否完全匹配。
解答:使用栈来处理括号序列,遇到左括号则入栈,遇到右括号则与栈顶元素进行匹配,如果匹配成功则继续处理剩余字符,如果不匹配则判定为非法序列。
算法步骤:- 初始化一个空栈;- 从左到右遍历括号序列,对于每个字符执行以下操作:- 如果是左括号,则将其入栈;- 如果是右括号,则将其与栈顶元素进行匹配:- 如果栈为空,则判定为非法序列;- 如果栈顶元素与当前字符匹配,则将栈顶元素出栈,继续处理剩余字符;- 如果栈顶元素与当前字符不匹配,则判定为非法序列。
- 遍历结束后,如果栈为空,则括号序列合法;否则,括号序列非法。
复杂度分析:时间复杂度为O(n),其中n为括号序列的长度。
2. 队列是一种具有先进先出(First In First Out)特性的线性数据结构。
常用方法:- enqueue(x): 将元素x入队;- dequeue(): 出队并返回队首元素;- getFront(): 返回队首元素;- isEmpty(): 判断队列是否为空;例题解答:(1)题目描述:使用队列实现栈的功能。
解答:使用两个队列,一个用于入栈操作,一个用于出栈操作。
入栈操作:直接将元素入队入栈队列中;出栈操作:如果出栈队列为空,则将入栈队列的元素逐个出队并入队出栈队列,此时出栈队列的队首元素即为要出栈的元素。
大工15秋《数据结构》在线作业1满分答案

大工15秋《数据结构》在线作业1满分答案大工15秋《数据结构》在线作业1一单选题1.广义表((e))的表头是()。
A. eB. (e)C. ()D. (())正确答案:B2.在一个单链表中,若要在p所指向的结点之后插入一个新结点,则需要相继修改()个指针域的值。
A. 1B. 2C. 3D. 4正确答案:B3.在一个长度为n的线性表中,删除值为x的元素时需要比较元素和移动元素的总次数为()。
A. (n+1)/2B. n/2C. nD. n+1正确答案:C4.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是()。
A. head==NULLB. head→next==NULLC. head→next==headD. head!=NULL正确答案:B5.一个顺序栈S,元素a,b,c,d,e依次进栈,如果5个元素的出栈顺序为b,e,d,c,a,则顺序栈的容量至少应为()。
A. 2B. 3C. 4D. 5正确答案:C6.在表长为n的顺序表中,若在每个位置插入数据元素的概率相等,插入一个数据元素平均需要移动()个数据元素。
A. (n-1)/2B. n/2C. n-1D. n正确答案:B7.广义表L=(a,(b,c)),进行Tail(L)操作后的结果为()。
A. cB. b,cC.(b,c)D.((b,c))正确答案:D8.表达式a*(b+c)-d的后缀表达式是()。
A. abcd*+-B. abc+*d-C. abc*+d-D. -+*abcd精确谜底:B9.在一个单链表中,删除*p结点之后的一个结点的操作是()。
A. p->next=p;B. p->next->next=p->next;C. p->next->next=p;D. p->next=p->next->next;精确谜底:D10.最大容量为n的轮回行列,队尾指针是rear,队头是front,则队空的条件是()。
数据结构作业题及答案

数据结构作业题及答案第一章绪论1、简述下列概念:数据、数据元素、数据结构、逻辑结构、存储结构、线性结构、非线性结构。
数据:指能够被计算机识别、存储和加工处理的信息载体。
数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。
数据元素有时可以由若干数据项组成。
数据结构:指的是数据之间的相互关系,即数据的组织形式。
一般包括三个方面的内容:数据的逻辑结构、存储结构和数据的运算。
逻辑结构:指各数据元素之间的逻辑关系。
存储结构:就是数据的逻辑结构用计算机语言的实现。
线性结构:数据逻辑结构中的一类,它的特征是若结构为非空集,则该结构有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。
线性表就是一个典型的线性结构。
非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接前趋和直接后继。
2、常用的存储表示方法有哪几种?顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。
由此得到的存储表示称为顺序存储结构。
链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。
由此得到的存储表示称为链式存储结构。
索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。
散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
3、求解下列算法的时间复杂度(1)i=1;k=0 while(i<n){k=k+10*i;i++;}T(n)=n-1∴T(n)=O(n)这个函数是按线性阶递增的(2)i=0;k=0;do{k=k+10*i;i++;} while(i<n);T(n)=n∴T(n)=O(n)这也是线性阶递增的(3)i=1;j=0;while(i+j<=n) {if(i<j)j++; else i++;}T(n)=n/2∴T(n)=O(n)虽然时间函数是n/2,但其数量级仍是按线性阶递增的。
数据结构题库及答案详解

数据结构题库及答案详解一、选择题1. 在数据结构中,线性结构的特点是什么?A. 结构中存在唯一的开始结点和终端结点B. 结构中所有结点的前驱和后继都存在C. 结构中所有结点都只有一个直接前驱和一个直接后继D. 结构中存在多个开始结点和终端结点答案:C2. 栈是一种特殊的线性表,其特点是:A. 先进先出B. 先进后出C. 可以同时在两端进行插入和删除操作D. 只能在一端进行插入和删除操作答案:D3. 在二叉树的遍历算法中,先序遍历的顺序是:A. 先访问根结点,然后遍历左子树,最后遍历右子树B. 先遍历左子树,然后访问根结点,最后遍历右子树C. 先遍历右子树,然后访问根结点,最后遍历左子树D. 先遍历左右子树,最后访问根结点答案:A二、填空题4. 在图的遍历中,______算法可以避免重复访问同一顶点。
5. 哈希表的冲突可以通过______方法来解决。
答案:4. 深度优先搜索(DFS)5. 链地址法或开放地址法三、简答题6. 简述排序算法中的快速排序算法的基本原理。
答案:快速排序算法是一种分治算法,它通过选择一个元素作为“基准”,然后将数组分为两个子数组,一个包含小于基准的元素,另一个包含大于基准的元素。
然后对这两个子数组递归地应用快速排序算法。
7. 解释什么是递归,并给出一个递归函数的例子。
答案:递归是一种在函数中调用自身的编程技术。
递归函数必须有一个明确的终止条件,以避免无限递归。
例如,计算阶乘的递归函数如下:```int factorial(int n) {if (n == 0) return 1; // 终止条件return n * factorial(n - 1); // 递归调用}```四、编程题8. 编写一个函数,实现单链表的反转。
答案:```c// 假设ListNode是链表节点的定义ListNode* reverseList(ListNode* head) {ListNode* prev = NULL;ListNode* curr = head;ListNode* next = NULL;while (curr != NULL) {next = curr->next; // 保存下一个节点curr->next = prev; // 反转指针prev = curr; // 移动prevcurr = next; // 移动curr}return prev; // 新的头节点}```9. 给定一个整数数组,请实现一个函数来找到数组中的最长连续子序列的长度。
数据结构试题库及答案

数据结构试题库及答案一、选择题1. 在数据结构中,线性结构的特点是:A. 元素之间存在一对一关系B. 元素之间存在一对多关系C. 元素之间存在多对多关系D. 元素之间存在一对一或多对多关系答案:A2. 栈(Stack)是一种特殊的线性表,其特点是:A. 只能在一端进行插入和删除操作B. 可以在两端进行插入和删除操作C. 只能在一端进行插入操作,另一端进行删除操作D. 可以在任意位置进行插入和删除操作答案:A3. 在二叉树中,度为1的节点数目为2,度为0的节点数目也为2,该二叉树的节点总数是:A. 5B. 6C. 7D. 8答案:B二、简答题1. 请简述什么是哈希表,并说明其主要优点。
答案:哈希表是一种通过哈希函数将键映射到表中一个位置来访问记录的数据结构。
其主要优点包括:平均情况下,查找、插入和删除操作的时间复杂度为O(1),即常数时间内完成操作;空间效率高,能够存储大量数据。
2. 描述图的深度优先搜索(DFS)算法的基本思想。
答案:深度优先搜索算法的基本思想是从一个顶点开始,尽可能深地搜索图的分支。
搜索过程中使用一个栈来保存路径上的顶点。
当搜索到一个顶点时,先访问该顶点,然后依次搜索其所有未被访问过的邻接顶点。
如果当前顶点的所有邻接顶点都被访问过,则回溯到上一个顶点,继续搜索其他邻接顶点。
三、应用题1. 给定一个无向图,使用邻接表表示,请编写一个算法找出图中的所有连通分量。
答案:首先,创建一个访问过的顶点集合。
然后,从图中任意一个未被访问的顶点开始,执行深度优先搜索(DFS)。
每次DFS完成后,就找到了一个连通分量。
重复这个过程,直到所有顶点都被访问过,即可找到图中的所有连通分量。
2. 假设有一个数组,需要频繁地进行查找、插入和删除操作,请设计一个适合这种场景的数据结构,并说明其优势。
答案:对于这种场景,可以使用平衡二叉搜索树(如AVL树或红黑树)。
这些数据结构可以保证在最坏情况下,查找、插入和删除操作的时间复杂度为O(log n)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据构造作业题及答案第一章绪论1、简述以下概念:数据、数据元素、数据构造、逻辑构造、存储构造、线性构造、非线性构造。
数据:指能够被计算机识别、存储与加工处理的信息载体。
数据元素:就是数据的根本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。
数据元素有时可以由假设干数据项组成。
数据构造:指的是数据之间的相互关系,即数据的组织形式。
一般包括三个方面的内容:数据的逻辑构造、存储构造与数据的运算。
逻辑构造:指各数据元素之间的逻辑关系。
存储构造:就是数据的逻辑构造用计算机语言的实现。
线性构造:数据逻辑构造中的一类,它的特征是假设构造为非空集,那么该构造有且只有一个开场结点与一个终端结点,并且所有结点都最多只有一个直接前趋与一个直接后继。
线性表就是一个典型的线性构造。
非线性构造:数据逻辑构造中的另一大类,它的逻辑特征是一个结点可能有多个直接前趋与直接后继。
2、常用的存储表示方法有哪几种?顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来表达。
由此得到的存储表示称为顺序存储构造。
链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。
由此得到的存储表示称为链式存储构造。
索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。
散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
3、求解以下算法的时间复杂度第二章线性表1、试描述头指针、头结点、开场结点的区别、并说明头指针与头结点的作用。
答:开场结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。
链表的头指针是一指向链表开场结点的指针(没有头结点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。
头结点是我们人为地在链表的开场结点之前附加的一个结点。
有了头结点之后,头指针指向头结点,不管链表否为空,头指针总是非空。
而且头指针的设置使得对链表的第一个位置上的操作及在表其他位置上的操作一致(都是在某一结点之后)。
2、何时选用顺序表、何时选用链表作为线性表的存储构造为宜?答:在实际应用中,应根据具体问题的要求与性质来选择顺序表或链表作为线性表的存储构造,通常有以下几方面的考虑:1.基于空间的考虑。
当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储构造为好。
2.基于时间的考虑。
假设线性表的操作主要是进展查找,很少做插入与删除操作时,采用顺序表做存储构造为宜;反之,假设需要对线性表进展频繁地插入或删除等的操作时,宜采用链表做存储构造。
并且,假设链表的插入与删除主要发生在表的首尾两端,那么采用尾指针表示的单循环链表为宜。
3、在顺序表中插入与删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素?答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点。
删除一个结点需平均移动(n-1)/2个结点。
具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。
i越接近n那么所需移动的结点数越少。
4、设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。
因顺序表L是递增有序表,所以只要从头找起找到第一个比它大(或相等)的结点数据,把x插入到这个数所在的位置就是了。
算法如下:void InsertIncreaseList( Seqlist *L , Datatype x )int i;for ( i=0 ; i < L -> length && L->data[ i ] < x ; i++) ; // 查找并比拟,分号不能少InsertList ( L ,x , i ); // 调用顺序表插入函数5、设单链表L是一个递减有序表,试写一算法,将x插入其后仍保持L的有序性。
只要从头找到第一个比x小(或相等)的结点数据,在这个位置插入就可以了。
算法如下:LinkList InsertDecreaseList( Linklist L, Datatype x )int i;ListNode *p,*s;p=L;//查找while(p->next && p->next->data>x )p=p->next;s=(ListNode *)malloc(sizeof(ListNode));s->data=x;s->next=p->next;p->next=s;return L;6、写一算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不一样。
先取开场结点中的值,将它及其后的所有结点值一一比拟,发现一样的就删除掉,然后再取第二结点的值,重复上述过程直到最后一个结点。
void DeleteList(Nodetype *L)Nodetype *p,*q,*s;if(L->Next==NULL||L->Next==NULL)printf("删除错误\n");exit(0);p=L->Next;q=p->Next;while(p->Next!=NULL)while(q)s=q;if(q->Data==p->Data)s->Next=q->Next;free(q);q=s->Next;elseq=q->Next;p=p->Next;第三章栈及队列1、简述栈的逻辑构造、存储构造及其相关算法答:栈的逻辑构造与线性表一样,如果它是非空的,那么有且只有一个开场结点,有且只能有一个终端结点,其它的结点前后所相邻的也只能是一个结点(直接前趋与直接后继),但是栈的运算规那么及线性表相比有更多的限制,栈(Stack)是仅限制在表的一端进展插入与删除运算的线性表,通常称插入、删除这一端为栈顶,另一端称为栈底。
表中无元素时为空栈。
栈的修改是按后进先出的原那么进展的,我们又称栈为LIFO表(Last In First Out)。
由于栈也是线性表,因此栈有顺序栈与链栈两种存储构造栈的根本运算有六种:构造空栈:InitStack(S)、判栈空: StackEmpty(S)、判栈满:StackFull(S)、进栈:Push(S,x)、可形象地理解为压入,这时栈中会多一个元素退栈:Pop(S) 、可形象地理解为弹出,弹出后栈中就无此元素了。
取栈顶元素:StackTop(S),不同及弹出,只是使用栈顶元素的值,该元素仍在栈顶不会改变。
2、简述队列的逻辑构造、存储构造及其相关算法。
答:队列是一种运算受限的线性表,它的运算限制及栈不同,是两头都有限制,插入只能在表的一端进展(只进不出),而删除只能在表的另一端进展(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头(Front) ,队列的操作原那么是先进先出的,所以队列又称作FIFO表(First In First Out)。
队列也有顺序存储与链式存储两种存储构造,前者称顺序队列,后者为链队。
队列的根本运算也有六种:置空队:InitQueue(Q)判队空:QueueEmpty(Q)判队满:QueueFull(Q)入队:EnQueue(Q,x)出队:DeQueue(Q)取队头元素:QueueFront(Q),不同及出队,队头元素仍然保存3、简述顺序队列"假上溢"的现象出现的原因。
答:因为我们的队列是存储在一个向量空间里,在这一段连续的存储空间中,由一个队列头指针与一个尾指针表示这个队列,当头指针与尾指针指向同一个位置时,队列为空,也就是说,队列是由两个指针中间的元素构成的。
在队列中,入队与出队并不是象现实中,元素一个个地向前移动,走完了就没有了,而是指针在移动,当出队操作时,头指针向前(即向量空间的尾部)增加一个位置,入队时,尾指针向前增加一个位置,在某种情况下,比方说进一个出一个,两个指针就不停地向前移动,直到队列所在向量空间的尾部,这时再入队的话,尾指针就要跑到向量空间外面去了,仅管这时整个向量空间是空的,队列也是空的,却产生了"上溢"现象,这就是假上溢。
4、设计算法判断一个算术表达式的圆括号是否正确配对。
对表达式进展扫描,凡遇到“(〞就进栈,遇“)〞就退掉栈顶的“(〞,表达式被扫描完毕,栈为空。
表示圆括号匹配。
否那么圆括号不匹配。
int PairBracket( char *S)//检查表达式中括号是否配对int i;SeqStack T; //定义一个栈InitStack (&T);for (i=0; i<strlen(S) ; i++)if ( S[i]=='(' ) Push(&T, S[i]); //遇'('时进栈if ( S[i]==')' ) Pop(&T); //遇')'时出栈return !EmptyStack(&T); // 由栈空否返回正确配对及否第四章串1、简述以下每对术语的区别:空串与空白串;串常量与串变量;主串与子串;静态分配的顺序串与动态分配的顺序串;目标串与模式串;有效位移与无效位移。
答:空串是指不包含任何字符的串,它的长度为零。
空白串是指包含一个或多个空格的串,空格也是字符。
串常量是指在程序中只可引用但不可改变其值的串。
串变量是可以在运行中改变其值的。
主串与子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。
静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。
动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc与free 等函数根据需要动态地分配与释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。
目标串与模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。
有效位移与无效位移:在串定位运算中,模式串从目标的首位开场向右位移,每一次合法位移后如果模式串及目标中相应的字符一样,那么这次位移就是有效位移(也就是从此位置开场的匹配成功),反之,假设有不一样的字符存在,那么此次位移就是无效位移(也就是从此位置开场的匹配失败)。
2、假设有如下的串说明:char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;(1)在执行如下的每个语句后p的值是什么?p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');答:stchr(*s,c)函数的功能是查找字符c在串s中的位置,假设找到,那么返回该位置,否那么返回NULL。