我是C新手。我用一些結構實現了一個簡單的堆棧,而不是。我已經發布了下面的整個代碼。問題部分被評論。C堆棧指向地址?
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *next;
} Node;
typedef struct Stack{
Node *top;
int size;
} Stack;
/* Function Prototypes */
void push(Stack *sPtr, int data);
int pop(Stack *sPtr);
void create(Stack *sPtr);
int main(void)
{
static Stack first;
create(&first);
push(&first,4);
push(&first,3);
push(&first,2);
printf("%d\n",pop(&first));
printf("%d\n",pop(&first));
printf("%d\n",pop(&first));
exit(1);
}
void push(Stack *sPtr, int data)
{
struct Node newNode;
newNode.data = data;
newNode.next = sPtr->top;
sPtr->top = &newNode;
sPtr->size++;
printf("%d\n",sPtr->top->data);
}
int pop(Stack *sPtr)
{
struct Node *returnNode = sPtr->top;
struct Node *topNode = sPtr->top;
if(sPtr->size != 0){
sPtr->top = topNode->next; /* =============PROBLEM?=============== */
return returnNode->data;
}
else{
printf("Error: Stack is Empty!\n");
return -1;
}
}
void create(Stack *sPtr)
{
sPtr->size = 0;
sPtr->top = NULL;
}
此代碼的輸出是
4
3
2
2
8103136
680997
所以,很顯然,它是拉動關閉頂部節點,然後打印接下來的兩個節點的地址,而不是他們的數據。
但爲什麼這樣做?據我知道(這是小)預成型此操作
sPtr->top = topNode->next;
應該告訴程序做出top
現在指向到topNode.next
。但相反,它似乎正在返回地址。這裏發生了什麼?
'pop()'永不減小'size'。 –