题目
链式栈结点为:(data,link),top指向栈顶。若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。A. x=top->data;top=top->link;B. top=top->link;x=top->link;C. x=top;top=top->link;D. x=top->link;
链式栈结点为:(data,link),top指向栈顶。若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。
A. x=top->data;top=top->link;
B. top=top->link;x=top->link;
C. x=top;top=top->link;
D. x=top->link;
题目解答
答案
A. x=top->data;top=top->link;
解析
考查要点:本题主要考查链式栈的入栈和出栈操作,特别是摘除栈顶结点的具体实现步骤。
解题核心思路:
链式栈的栈顶由指针top指向,摘除栈顶结点需要先保存栈顶结点的值,再调整top指针指向新的栈顶结点。关键在于操作顺序:必须先取数据,再移动指针,否则会导致数据丢失或指针错误。
破题关键点:
- 栈顶结点的结构:每个结点包含
data(数据域)和link(指针域,指向下一个结点)。 - 弹出操作的本质:将
top指向当前栈顶的下一个结点,同时记录当前栈顶的data值。
选项分析:
-
选项A:
x = top->data:将当前栈顶结点的值保存到x中。top = top->link:将top指针指向当前栈顶的下一个结点,完成摘除操作。
正确,符合弹出操作的逻辑。
-
选项B:
top = top->link:先移动top指针,此时top指向原栈顶的下一个结点。x = top->link:试图取x,但此时x保存的是下一个结点的指针,而非原栈顶的值。
错误,操作顺序颠倒且逻辑混乱。
-
选项C:
x = top:直接将top指针赋值给x,但x应保存数据而非指针。top = top->link:虽然移动指针正确,但x未正确获取数据。
错误,未正确提取数据域的值。
-
选项D:
x = top->link:直接保存栈顶结点的指针域,而非数据域。
错误,未完成数据保存且操作无意义。