Я создаю стек со связанным списком. Я закодировал часть пакета push и display, но он просто выводит последние введенные данные в качестве вывода, когда я пытаюсь отобразить содержимое стека. Почему это происходит?Объяснение вывода стека, реализованного с помощью связанного списка
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 (первый), чтобы отобразить весь список. Если вы показываетеStack (текущий), он отображает только последний элемент. Кроме того, вам не нужно malloc в displayStack. – cup
на displayStack: не нужно 'malloc'. – BLUEPIXY