C 为什么显示从s1开始->;顶部
为什么显示功能的开头是C 为什么显示从s1开始->;顶部,c,stack,C,Stack,为什么显示功能的开头是s1->top typedef struct node* Nodeptr; typedef char dataitem; typedef struct node{ dataitem data; Nodeptr next; }Node; typedef struct{ int count; Nodeptr top; }Stack_Head; typedef Stack_Head* Stack; Stack createStack() { Stack s1; s
s1->top
typedef struct node* Nodeptr;
typedef char dataitem;
typedef struct node{
dataitem data;
Nodeptr next;
}Node;
typedef struct{
int count;
Nodeptr top;
}Stack_Head;
typedef Stack_Head* Stack;
Stack createStack() {
Stack s1;
s1 = (Stack) malloc(sizeof(Stack_Head));
s1 - > count = 0;
s1 - > top = NULL;
return s1;
}
Nodeptr createNode(dataitem item) {
Nodeptr temp;
temp = (Nodeptr) malloc(sizeof(Node));
temp - > data = item;
temp - > next = NULL;
return temp;
}
void push(Stack s1, dataitem item) {
Nodeptr temp = createNode(item);
temp - > next = s1 - > top;
s1 - > top = temp;
s1 - > count++;
}
void display(Stack s1) {
Nodeptr ptr = s1 - > top;
while (ptr != NULL) {
printf("%d", ptr - > data);
ptr = ptr - > next;
}
printf("\n");
}
void pop(Stack s1) {
Nodeptr temp;
if (isEmpty(s1))
printf("List is Empty");
else {
temp = s1 - > top;
s1 - > top = temp - > next;
temp - > next = NULL;
free(temp);
s1 - > count;
}
int isEmpty(Stack s1) {
return s1 - > top == NULL;
}
display
仅显示(打印)堆栈。实现者可以选择从顶部开始显示它。堆栈通常从顶部开始工作,后进先出
请注意,如果
s1
为空,则访问Nodeptr ptr=s1->top代码>无效,可能导致分段错误。因为显示功能将显示堆栈中的所有元素,并且它必须从顶部开始,因为它是唯一可用的元素
ptr
是一个循环变量。它从堆栈的顶部开始,在每次迭代中,它被移动到下一个元素,直到到达堆栈的底部,即具有空下一个指针的节点
编辑
为什么从顶部而不是底部开始?主要是因为它容易得多。您可以访问堆栈顶部,每个节点都可以访问它下面的节点,但不能访问它上面的节点
如果你想从下往上打印,那就难多了。你如何从最下面的项目到上面的项目?除非你还记得它的前身,否则你就不能
从底部开始的最简单方法是首先反转堆栈,即从顶部迭代堆栈,然后在运行过程中创建新堆栈,但这仍然比简单地说“我们将从顶部打印”要困难得多。认真地说,如果你不能尽最少的努力使问题可读,为什么有人要费心给你一个答案,那也是免费的?我投票把这个问题作为离题题来结束,因为这表明我没有努力使它成为一个正确的问题。答案是“初始化ptr
”,但从阅读代码中应该可以看出这一点。@SouravGhosh这不是简历的原因。这就是否决投票的原因。s1->top是最后添加的元素,对吗?为什么它开始显示在顶部,而其他人是第一个呢?如果我按8,9和10,它应该显示为8 9 10,这里。。10是s1->右上角吗?那么为什么ptr在10中?@patricksguerra但是当你把它们从堆栈中弹出时,它们会以10、9、8的顺序出现。那么谁来说正确的顺序是什么呢?如果我显示8,9,它应该首先显示8,对吗?在代码上,它是从后面开始的吗?它首先指向9,如果它从末尾开始,我如何遍历它?它是一个。您可以按物品的放置顺序或取下顺序显示物品。没关系。在这种情况下,它们将按照它们将要完成的顺序显示,因为这样做比用其他方式更容易。