我正在創建一個帶有鏈接列表的堆棧。我編碼了推送和顯示堆棧部分,但是當我嘗試顯示堆棧內容時,它只是生成最後輸入的數據作爲輸出。這是爲什麼發生?解釋使用鏈接列表實現的堆棧的輸出
struct LinkedStack {
int data;
struct LinkedStack* next;
};
struct LinkedStack *first = NULL;
struct LinkedStack *previous = NULL;
struct LinkedStack *current = NULL;
int main(void) {
int data = 0, choice = 0;
if(current == NULL) {
printf("\nNo Memory Allocated");
}
while(1) {
printf("\n1. Push Data");
printf("\n2. Pop Data");
printf("\n3. Display The Stack");
printf("\n4. Exit");
printf("\nEnter Your Choice::\n");
scanf("%d", &choice);
switch(choice) {
case 1:
current = (struct node *)malloc(sizeof(struct LinkedStack));
printf("Enter the data:: ");
scanf("%d", &data);
push(¤t, data);
break;
case 3:
printf("\n\n Stack Contents::");
displayStack(current);
break;
case 4:
exit(1);
default:
printf("\nWrong Choice.Enter Again");
}
}
}
void push(struct LinkedStack **s, int usrdata) {
if(first == NULL) {
first = *s;
}
if(previous != NULL) {
previous->next = *s;
}
(*s)->data = usrdata;;
(*s)->next = NULL;
previous = *s;
}
void displayStack(struct LinkedStack *s) {
struct LinkedStack *temp = (struct LinkedStack *)malloc(sizeof(struct LinkedStack));
if(temp == NULL) {
printf("No Memory Allocated");
}
temp = s;
while(temp != NULL) {
printf("\n %d", temp->data);
temp = temp->next;
}
}
再次閱讀該問題。我已經在那裏寫了一切。它不可能比這更具體。 – arindrajit
在案例3中,displayStack(第一個)顯示整個列表。如果你顯示堆棧(當前),它將只顯示最後一個項目。另外,你不需要在displayStack中使用malloc。在displayStack處: – cup
:不需要'malloc'。 – BLUEPIXY