#CS50801. 完善程序8-栈和队列-1双栈模拟数组
完善程序8-栈和队列-1双栈模拟数组
双栈模拟数组
只使用两个栈结构 和 ,模拟对数组的随机读取。作为栈结构,和 只能访问栈顶(最后一个有效元素)。栈顶指针和 均指向栈顶元素的下一个位置。
输入第一行包含的两个整数,分别是数组长度 n 和访问次数 m,中间用单个空格隔开。
第二行包含 n 个整数,一次给出数组各项(数组下标从 0 到 a−1)。第三行包含 m 个整数,需要访问的数组下标。对于每次访问,输出对应的数组元素。
#include <stdio.h>
const int SIZE = 100;
int stack1[SIZE], stack2[SIZE];
int top1, top2;
int n, m, i, j;
void clearStack()
{
int i;
for ( i = top1; i < SIZE; i++ )
stack[i] = 0;
for ( i = top2; i < SIZE; i++ )
stack[i] = 0;
}
int main(){
scanf( "%d,%d", &n, &m );
for ( i = 0; i < n; i++ )
scanf( "%d", &stack1[i] );
top1 = ______ (1)______;
top2 = ______ (2)______;
for ( j = 0; j < m; j++ )
{
scanf( "%d", &i );
while ( i < top1 - 1 )
{
top1--;
______( 3 ) ______;
top2++;
}
while ( i > top1 - 1 )
{
top2--;
______( 4 ) ______;
top1++;
}
clearstack();
printf( "%d\\
", stack1[______( 5 ) ______] );
}
return(0);
}
- ①处应填( ){{ select(1) }}
- 0
- n
- 1
- -1
- ②处应填( ){{ select(2) }}
- 1
- 2
- n
- 0
- ③处应填( ){{ select(3) }}
- stack2[top2]=stack1[top1]
- top1=top2
- stack2[top1]=stack1[top1]
- stack2[top1]=stack1[top2]
- ④处应填( ){{ select(4) }}
- stack1[top1]=stack2[top1]
- stack1[top2]=stack2[top1]
- stack1[top1]=stack2[top2]
- stack1[top2]=stack2[top2]
- ⑤处应填( ){{ select(5) }}
- top1
- top2
- top1-1
- top2-1