目录
3.栈、队列和数组
3.3栈和队列的应用
3.4数组和特殊矩阵
部分习题
1.假设栈初始为空,将中缀表达式a/b+(c*d-e*f)转化为等价的后缀表达式过程中,当扫描到f时,栈中元素依次是()
A.+(*- B.+(-* C./+(*-* D./+-*
2.将n阶上三角矩阵A按列优先压缩存放在一维数组B[1...n(n+1)/2+1]中,则存放到B[k]中的非零元素(1<=i,j<=n)的下表i,j,k的对应关系是()
A.(j-1)(2n-j+1)/2+i-j B.(j-1)(2n-j+2)/2+i-j+1
C.(j-1)(2n-j+2)/2+i-j D.(j-1)(2n-j+1)/2+i-j+1
3.适用于压缩存储稀疏矩阵的两种存储结构是()
A.三元组表和十字链表 B.三元组表和邻接矩阵
C.十字链表和二叉链表 D.邻接矩阵和十字链表
4.设有一个12*12的对称矩阵M的上三角部分元素(1<=i<=j<=12)按行优先存入C语言的一组数组N中,元素在N中的下标是()
A.50 B.51 C.55 D.66
1.B
栈 | 后缀表达式 | 当前扫描元素 | 动作说明 |
a | a加入后缀表达式 | ||
a | / | /入栈 | |
/ | a | b | b加入后缀表达式 |
/ | ab | + | +优先级低于栈顶/,弹出/ |
ab/ | + | +入栈 | |
+ | ab/ | ( | (入栈 |
+( | ab/ | c | c加入后缀表达式 |
+( | ab/c | * | 栈顶为(,*入栈 |
+(* | ab/c | d | d加入后缀表达式 |
+(* | ab/cd | - | -优先级低于栈顶*,弹出* |
+( | ab/cd* | - | 栈顶为(,-入栈 |
+(- | ab/cd* | e | e加入后缀表达式 |
+(- | ab/cd*e | * | *优先级高于-,*入栈 |
+(-* | ab/cd*e | f | f加入后缀表达式 |
2.B
按列优先存储,元素前面有j-1列,共有n+(n-1)+...+(n-j+2)=(2n-j+2)(j-1)/2个元素,元素在第j列是第i-j+1个元素,数组B下标从1开始,k=(j-1)(2n-j+2)/2+i-j+1
3.A
三元组表的结点存储了行、列、值三种信息,是主要用来存储稀疏矩阵的一种数据结构,十字链表将行单链表和列单链表结合起来存储稀疏矩阵
4.A
数组N下标从0开始,第一个元素对应存入,矩阵M的第一行有12个元素,第二行有11个元素,第三行有10个元素,第四行9个元素,第五行8个元素,所以是第12+11+10+9+8+1=51个元素,下标为50