Создать список из целых чисел. Подсчитать количество отрицательных элементов, создав из них новый список - C (СИ)
Формулировка задачи:
Создать список из целых чисел. Подсчитать количество отрицательных элементов, создав из них новый список. Срочно надо, курсач сдавать через 3 часа. Есть готовое решение, но оно не работает, а разбираться некогда. Помогите пожалуйста!
#include <stdio.h> #include <string.h> #include <conio.h> #include <locale.h> #include <stdlib.h> struct stack //описание стека stack {int inf; stack *next;}; stack *init_stack() //инициализация стека {return NULL;} void push(stack *&s,int item) //добавление элемента в стек. { stack *r; r=(stack*)malloc(sizeof(stack)); r->inf=item;r->next=s;s=r; } int pop(stack *&s) //выбор верхнего элемента из стека { stack *r=s; int i=r->inf;s=r->next; free(r); return i; } int peek(stack *s) //просмотр верхнего элемента стека { return s->inf; } int empty_stack(stack *s) //определение пустоты стека {return(s)?0:1;} int main() { setlocale(0,"Russian"); printf("\nСоздать список из целых чисел. Подсчитать количество отрицательных элементов,\nсоздав из них новый список.\n\n"); FILE *h=fopen("Stek_in.txt", "r"); FILE *s=fopen("Stek_out.txt", "w"); int i, k=0; stack *head=init_stack(); stack *head1=init_stack(); while (!feof(h)) { fscanf(h, "%d", &i); push (head, i); } while (!empty_stack(head)) { i=pop(head); if (i<0) { push(head1, i); k++; } } while (!empty_stack(head1)) { i=pop(head1); fprintf(s,"%d ", i); } printf("Файл записан %d", k); fcloseall(); getch(); }
Решение задачи: «Создать список из целых чисел. Подсчитать количество отрицательных элементов, создав из них новый список»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define NUMELEM 5 typedef struct mylist { int val; struct mylist *next; }mylist; mylist *new_node(int v) { mylist *new; if((new=(mylist*)malloc(sizeof(mylist)))==NULL)return NULL; new->val=v; new->next=NULL; return new; } mylist *add_front(mylist *p, mylist *n) { n->next=p; return n; } void print_mylist(mylist *l) { for(; l!=NULL; l=l->next) { printf("%d ", l->val); } } void free_mylist(mylist *l) { mylist * n; for(; l!=NULL; l=n) { n=l->next; free(l); } } int main(void) { mylist* a=NULL, *b=NULL; int e=0, c=0; for(int i=1; i<=NUMELEM; ++i) { scanf("%d", &e); a=add_front(a, new_node(e)); if(e<0)b=add_front(b, new_node(e)); } print_mylist(a); puts(""); if(b!=NULL)print_mylist(b); free_mylist(a); free_mylist(b); return 0; }
Объяснение кода листинга программы
- Создание списка из целых чисел.
- Создание двух указателей: один для списка a, другой для списка b.
- В каждой итерации цикла вводится число e и добавляется в начало списка a с помощью функции add_front.
- Если число e отрицательное, оно добавляется в начало списка b с помощью функции add_front.
- После завершения цикла, список a выводится на экран.
- Затем, список b выводится на экран.
- Функции free_mylist вызываются для освобождения памяти, занятой списками a и b.
- Программа возвращает 0, что означает успешное завершение работы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д