问答题

【说明】
 栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(Stock Top),而另一端称为栈底(Stock Bottom)。栈的基本操作包括:创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否已满(IsFull)、获取栈顶数据(Top)、压栈/入栈(Push)、弹栈/出栈(Pop)。
 当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储(如下图所示)。

 以下C代码采用链式存储结构实现一个整数栈操作。
【C代码】
 typedef struct List {
 int data;         //栈数据
 struct List* next;     //上次入栈的数据地址
 }List;
 typedef struct Stack{
 List* pTop;        //当前栈顶指针
 }Stack;
  Stack* NewStack() {return (Stack*) calloc(1/sizeof(Stack));}
 int IsEmpty(Stack* S){//判断栈S是否为空栈
   if(<u> (1) </u>)return 1;
   return 0;
 }
 int Top(Stack* s){//获取栈顶数据。若栈为空,则返回机器可表示的最小整数
 if(IsEmpty(S))return INT_ MIN;
   return<u> (2) </u>;
 }
 void Push(Stack* S,int theData) {//将数据theData压栈
   List* newNode;
   newNode=(List*)calloc(1/sizeof (List));
   newNode->data=theData;
   newNode->next=S->pTop;
   S->pTop=<u> (3) </u>;
 }
 void Pop(Stack* S) {//弹栈
   List* lastTop;
   if(IsEmpty(S) ) return;
   lastTop=S->pTop;
   S->pTop=<u> (4) </u>;
   free(lastTop);
 }
 #define MD(a) a<<2
 int main(){
   int i;
   Stack* myStack;
   myStack= NewStack();
   Push(myStack,MD(1));
   Push(myStack,MD(2));
   Pop(myStack);
   Push(myStack,MD(3)+1);
   while( !IsEmpty(myStack) ){
      printf("%d",Top(myStack));
     Pop(myStack);
   }
   return 0;
 }
 以上程序运行时的输出结果为:<u> (5) </u>

【参考答案】

(1)S==NULL||S->pTop==NULL (2)S->pTop->data (3)newNode (4)S->......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)