};
ElemType *stack; int top;
void Push(struct StackSq* S, ElemType x) { }
问题1:根据此算法定义的数据结构的类型,此算法的功能是 向顺序栈中推入一个元素 。
问题2:if语句中的条件应为: B. 。 A. S.top= =S.MaxSize B. S.top= =S.MaxSize-11 算法5:
ElemType OutQueue(struct QueueSq *Q) { }
问题1、算法适用的数据结构 ? 问题2、算法功能? 问题3、算法返回?
问题4、算法有无健壮性?若有,是哪(些)语句? 问题5、算法的关键语句是哪(些)语句? 问题6、算法的时间复杂度大O()?
9
if( ) againMalloc(S); S->top++;
S->stack[S->top]=x;
if(Q->front==Q->rear) { }
Q->front=(Q->front+1)%Q->MaxSize; return Q->queue[Q->front];
printf(\exit(1);
七、分析题
1、有一个顺序存储的栈,最大存储空间MaxSize=5,栈顶指针top,现有A、B、C、D四个元素。
要求1:写出顺序存储栈结构定义。 要求2:画出 初始化状态。
要求3:画出以上四个元素依次进栈后的状态。
要求4:在要求3的基础上,画出三个元素出栈后,又有E、F二个元素进栈,画出队首、队尾指针位置。
要求5:以下是从栈中删除元素,并将被删除的元素值由函数返回的算法,请填写算法中缺失的语句。 答1:
typedef char ElemType; struct Stack{
ElemType *stack[ ]; int top; int MaxSize; }; 答2:
0
Top=-1
答3:
0
答4: 0
10
1 2 3 4
1 A 2 B 3 C 4 D
top
1 2 3 4 D 5 E 6 F 7 8 9
top
答5:
ElemType Pop(Stack& S) { }
2、有一个顺序存储的循环队列,最大存储空间为5,假设队首指针指向队首元素的前一个位置,队尾指针指向队尾元素,现队列中已有A、B、C、三个元素。 要求1:已有顺序存储队列结构的定义,请填写定义中缺失的语句。 要求2:填写出初始化算法语句。
要求3:画出经初始化后,以上三个元素依次进队后,队首、队尾指针位置。 要求4:画出以上三个元素依次出队后,元素D、E依次进队后队首、队尾指针位置。 要求5:以下是向队列中插入元素的算法,在不考虑扩充空间的前提下,请填写算法中缺失的语句或语句缺失的部分。 答1:
Typedef int ElemType; struct Queue{
int MaxSize; int front , rear; ElemType *queue; }; 答2:
void InitQueue(Queue& Q)
11
if(S.top==-1){ }
ElemType temp=S.stack[S.top]; S.top--; return temp;
cerr<<\exit(1);
{ } 答3:
0
答4: 0 E rear 答5:
void QInsert(Queue& Q, const ElemType& item) { }
八、写出下列中缀表达式的后缀表达式和栈的变化,并写出求值过程栈的变化。 1、35+6×(27-6)+6/2
2、16+5×27+8-5×4
12
Q.front = Q.rear =0 ;
1 2 A 3 B 4 C
front
rear
1 2 3 4 D
Front
int k=(Q.rear+1)%QueueMaxSize; if(k= =Q.front) { } Q.rear=k; Q.queue[k]=item;
cerr<<\exit(1);