Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: реализация стека в Си. Ошибки  (Прочитано 1717 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн artemu88

  • Автор темы
  • Участник
  • *
  • Сообщений: 115
    • Просмотр профиля
реализация стека в Си. Ошибки
« : 23 Февраля 2025, 16:49:48 »
Доброго времени суток всем!
Изучаю Си по книгам.
Написал реализацию стека:
#include <stdio.h>
#include <stdlib.h>

typedef struct{
int num;
struct node *next;
} node;


node *push (node *list, int num){
node *end_ptr;

if (list==NULL){
list=malloc(sizeof(node));
list->num=num;
list->next=NULL;

}
else{
end_ptr=malloc(sizeof(node));
end_ptr->num=num;
end_ptr->next=list;
list=end_ptr;

}
//printf("%d\n", list->num);
return list;
}

int pop(node *list){

node *end_ptr;
int popped_val;

end_ptr=list;
popped_val=list->num;

list=list->next;
free(end_ptr);

return popped_val;
}

int main(){
node *list=NULL;
list=push(list, 5);
list=push(list, 6);
list=push(list, 1);
list=push(list, 0);

printf("popped %d\n", pop(list));

while(list!=NULL){
printf("%d\n", list->num);
list=list->next;
}

return 0;
}
Кладу в стек числа 5, 6, 1, 0. Но после вызова функции по удалению элемента, получаю стек с числами 0 и 1. Числа 5 и 6 пропадают.
Подскажите, пожалуйста, что я делаю не так.
Прошу не кидать тапками.
Всем откликнувшимся Большое Спасибо!

Оффлайн artemu88

  • Автор темы
  • Участник
  • *
  • Сообщений: 115
    • Просмотр профиля
Re: реализация стека в Си. Ошибки
« Ответ #1 : 02 Апреля 2025, 12:37:01 »
Разобрался. Код:
#include <stdio.h>
#include <stdlib.h>

struct Node{
int value;
struct Node *next;
};


struct Node *push(struct Node *node, int item){
struct Node *new_item=malloc(sizeof(struct Node));
new_item->value=item;
new_item->next=node;
return new_item;
}

struct Node *pop(struct Node *head){
struct Node *head_ptr=head->next;
free(head);
return head_ptr;
}


void print_stack(struct Node *node){
while(node!=NULL){
printf("%d\n", node->value);
node=node->next;
}
}

int main(){
struct Node *stack=NULL;

stack=push(stack, 3);
stack=push(stack, 1);
stack=pop(stack);
stack=push(stack, 5);
stack=pop(stack);
stack=push(stack, 112);

print_stack(stack);

free(stack);
return 0;
}

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.