下面的算法中使用了一个栈st,阅读该算法,回答下列问题:(1)算法的功能是:__________________________________(2)若字符数组A[ ] = { ‘m’,‘a’,‘d’,‘a’,‘m’,‘i’,‘m’,‘a’,‘d’,‘a’,‘m’ },执行这个算法,跟踪栈的变化。栈结构定义为typedef struct astack *Stack;typedef struct astack{int top; //栈顶位置int maxtop; //栈顶位置的最大值StackItem *data; //栈元素数组指针}Astack;基本函数包括(1)初始化栈 StackInit (Stack S)(2)判断栈是否为空 int StackEmpty(Stack S)(3)判断栈是否满 int StackFull(Stack S)(4)入栈 Push(StackItem x,Stack S)(5)出栈 StackItem Pop(Stack S)(6)获取栈顶元素内容 StackItem StackTop(Stack S)#include “stack.h”int unknown ( char A[ ], int n ){Stackst=StackInit (n+1);int yes = 1, i = 0;char ch;while ( A[i] != “\0” ){Push ( A[i], st );i++;}i = 0;while ( A[i] != “\0” ){ch=Pop (st );if ( A[i] == ch )i++;else{yes = 0;break;}}return yes;}
查看答案
下面的算法中使用了一个栈st,阅读该算法,回答下列问题:(1)算法的功能是:__________________________________(2) 若单链表中各结点中数据的逻辑顺序为 { ‘u’,‘n’,‘i’,‘v’,‘e’,‘r’,‘s’,‘i’,‘t’,‘y’ },执行这个算法,跟踪栈的变化。#include "stack.h"#include "LinkList.h"void unknown ( ){//此单链表带有表头结点,它的表头指针为first。Stack S;ListNode*p = first->link, *q;while ( p != NULL ){Push (p, S);p = p->link;}p = first;p->link = NULL;while ( !StackEmpty( ) ) //将栈中保存的结点依次出栈{q=Pop (S );q->link = p->link;p->link = q;p = q;}}
简述以下算法的功能:(1)Status algo1(Stack S){int i,n,A[255];n=0;while(!StackEmpty(S)){n++;Pop(S,A[n]);}for(i=1;i<=n;i++)Push(S,A[i]);}(2)Status algo2(Stack S,int e){Stack T;int d;InitStack(T);while(!StackEmpty(S)){Pop(S,d);if(d!=e)Push(T,d);}while(!StackEmpty(T){Pop(T,d);Push(S,d);}}
1,2,3,4的四辆车,顺序进入一个栈式结构的站台(栈的大小为4),试写出这四辆车开出站的所有可能的顺序(每辆车入站后出站的时间未知):
在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top作为栈顶,当做出栈处理时,top变化为( )。
A. top不变
B. top=0
C. top--
D. top++