【正确答案】
B
【答案解析】由于栈的插入、删除操作只能在一端进行,而对于单链表来说,在首端插入、删除结点要比在尾端相对容易一些,所以,我们将单链表的首端作为栈顶端,即将单链表的头指针作为栈顶指针。
栈的链式存储结构在C语言中可用下列类型定义实现:
typedef struct node{ ∥链栈的结点结构
StackEntry item; ∥栈的数据元素类型
struct node*next; ∥指向后继结点的指针
}NODE;
typedef struct stack{
NODE*top;
}STACK;
下面给出链栈各项基本操作的算法。
①初始化栈S
void InitStack(STACK*S) {S—>top=NULL;}
②入栈
void Push(STACK*S,StackEntry item)
{ p=(NODE*)malloc(sizeof(NODE));
if(!p)exit(OVERFLOW);
else{p—>item=item;
p一>next=s—>top;
s—>top=p;
)
)
③出栈
void Pop(STACK*S,StackEntry“item)
{ if(StackEmpty(*S))exit(“Stack is empty”);
else{
*item=S—>top—>item;
p—s—>top;
s—>top=p—>next;free(p);
}
}
④获取栈顶元素内容
void GetTop(STACK S,StackEntry*item)
{ if(StackEmpty(S))exit("Stack is empty");
else*item=S.top—>item;
}
⑤判断栈S是否空
int StackEmpty(STACK S)
{ if(S.top==NULL)return TRUE;
else FALSE;
}