问题 问答题

阅读下列说明和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) newNode (4) S->pTop->next (5) 24 4

解析:

[分析]:

该题考查考牛对“栈”的掌握。用C代码实现一个整数栈操作。“栈”是数据结构复习中一个重要的知识点,在多年的考试中一直是个重点,也是在平时辅导当中强调的最多的。这类题要求考生平时多阅读程序,理解算法的精髓,方可轻松解决。

Stack结构类型的定义是为了方便在函数体中修改pTop指针。要判断栈是否为空,则要看指针S的指向是否为NULL或者看栈顶指针S->pTop的指向是否为NULL。所以第(1)空填:S= =NULL || S->pTop= =NULL。

函数Top(Stack*S)用于获取栈顶数据。若栈为空,则返回机器可表示的最小整数;不为空则返回栈顶指针的值。在定义时,栈数据是data,所以第(2)空填:S->pTop->data。

题中void Push(Stack* S,int theData)是将数据压入栈中,由于栈是从一头插入和删除的,则要在栈项新增加一个栈单元,将新值赋给新单元的值域,再修改栈顶指针,所以第(3)空是修改栈顶指针,指向新单元,即S->pTop= newNode。

void Pop(Stack*S)是弹出栈,如栈是空栈,则直接返回;如果不是空栈,则修改栈顶指针,将栈顶指针指向它的下一个单元:S->pTop =S->pTop->next,所以第(4)空填:S->pTop->next。

第(5)空是比较麻烦的,也比较费时间,需要将数据代入采用手工的方式运行,得出结果。

选择题
单项选择题 B型题