问答题

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

以下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( (1) ) return 1;
return 0;

int Top (Stack*s)//获取栈顶数据。若栈为空,则返回机器可表示的最小整数
if(IsEmpty (S)) return INT_MIN;
return (2)

void Push(Stack* s, int theData)//将数据theData压栈
List* newNode;
newNode= (List*) calloc (1, siz eof (List));
newNode->data=theData;
newNode->next=S->pTop;
S->pTop= (3) ;

void Pop(Stack* s) //弹栈
List* lastTop;
If (IsEmpty (S)) return;
lastTop=S->pTop;
S->pTop= (4) ;
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;

以上程序运行时的输出结果为 : (5)

【参考答案】

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

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

问答题
阅读下列说明和C函数代码,在(n)处填入适当的字句。 [说明] 对二叉树进行遍历是二叉树的一个基本运算。遍历是指按某种策略访问二叉树的每个节点,且每个节点仅访问一次的过程。函数InOrder()借助栈实现二叉树的非递归中序遍历运算。 设二叉树采用二叉链表存储,节点类型定义如下。 typedef struct BtNode ElemType data; *节点的数据域,ElemType的具体定义省略* struct BtNode *lchild,*rchild; *节点的左、右孩子指针域* BtNode, *BTree; 在函数InOrder()中,用栈暂存二叉树中各个节点的指针,并将栈表示为不含头节点的单向链表(简称链栈),其节点类型定义如下。 typedef struct StNode *链栈的节点类型* BTree elem; *栈中的元素是指向二叉链表节点的指针* struct StNode *link; StNode; 假设从栈顶到栈底的元素为en,ee-1,…,e1,则不含头节点的链栈示意图如图8.12所示。 [C函数] int InOrder(BTree root) *实现二叉树的非递归中序遍历 * Brrree ptr; *ptr用于指向二叉树中的节点 * StNode *q; *q暂存链栈中新创建或待删除的节点指针* StNode *stacktop=NULL; *初始化空栈的栈顶指针stacktop* ptr=root; *ptr指向二又树的根节点 * while ( (1) || stacktop!=NULL) while (ptr!=NULL) q= (StNode *)malloc(sizeof (StNode)); if (q==NULL) return-1; q->elem=ptr; (2) ; stacktop=q; *stacktop指向新的栈顶* ptr= (3) ; *进入左子树* q= stacktop; (4) ; *栈顶元素出栈* visit (q); *visit是访问节点的函数,其具体定义省略* ptr= (5) ; *进入右子树* free (q); *释放原栈顶元素的节点空间* return 0: *InOrder*