我的任務是建立一個「代表堆棧」的基本鏈表。所以數據只能按照後進先出的原則進行訪問。我必須在該「堆棧」上應用某些功能。 我的代碼編譯得很好,但執行時,它只是無限打印1個。我不知道這是如何,因爲我真的只使用一個while循環。 有誰知道我的問題是什麼?也許我可以在將來避免這樣的錯誤。感謝您的任何幫助。並提前道歉,我是一個初學者!爲什麼這個基本的C程序會導致無限循環?
#include <stdio.h>
#include <stdlib.h>
typedef struct Stack {
struct Stack *next;
int data;
} Stack;
Stack* push(Stack*head, int d) { //add a datapoint to the top of the stack
Stack *temp;
temp=malloc(sizeof(Stack));
temp->data=d;
temp->next=head;
return temp;
}
Stack* pop(Stack*head) { //read the top data point, and delete it
Stack* newHead=head->next;
printf("%i", head->data);
free(head);
return newHead;
}
int peek(Stack*head) { // return the top datapoint, without delete
return head->data;
}
void isempty(Stack*head) {
if (head==NULL) {
printf("Stack empty");
}
printf("Stack has data");
}
void print(Stack*head) { //print complete Stack
Stack* cursor;
cursor=head;
while (cursor!=NULL) {
printf("%i", cursor->data);
}
}
int main(int argc, const char * argv[]) {
Stack* head;
head=malloc(sizeof(Stack));
head=NULL;
head=push(head, 4);
head=push(head, 2);
head=push(head, 1);
printf("%i", peek(head));
print(head);
head=pop(head);
print(head);
isempty(head);
head=pop(head);
head=pop(head);
isempty(head);
return 0;
}
'head = malloc(sizeof(Stack)); head = NULL;'這兩個語句實現了什麼? –
移除'head = malloc(sizeof(Stack));'在main行 - 這不是必需的 –