Односвязный список: удаление элементов,заканчивающихся на 5 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть вот такая задача: Создать список из случайных целых чисел и удалить элементы, заканчивающиеся на цифру 5. Язык Си.Реализовать стеком или очередью.Первую часть сделала на основе данной на лекциях теории, а вот насчет того,как извлечь именно значение из списка, проверить делиться ли оно на 5 без остатка и если да, то удалить...Не могу найти нигде примеров такого синтаксиса.Может,кто сможет подсказать?
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <process.h>
#include<malloc.h>
#include <Windows.h>
struct Stack {
    int info;
    Stack* next;
};
 
void createStack(Stack **t, Stack **begin);
void addElementInStack(Stack **t, Stack **begin, int info);
void viewStack(Stack *begin);
void runTask(Stack **begin);
void deleteStack(Stack **begin);

void main(void) {
    setlocale(LC_ALL, "Russian");
    printf_s("Task one.\n\n");
    _getch();
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Stack *begin, *t;//вершина и текущий элемент стека
    begin = NULL;//пустой стек
    t = NULL;
 
    int subTask;
    while (true) {
        system("cls");
        printf_s("Choose 1 for creating stack\nChoose 2 for adding element in a stack\nChoose 3 for viewing stack\nChoose 4 for running task\nChoose 0 finishing\n");
        fflush(stdin);
        scanf_s("%d", &subTask);
 
        switch (subTask) {
        case 1:
            createStack(&t, &begin);//создание 
            break;
        case 2:
            int info;
            printf_s("Enter element: \n");
            scanf_s("%d", &info);
            addElementInStack(&t, &begin, info);//добавим в стек элемент
            _getch();
            break;
        case 3:
            viewStack(begin);//посмотреть
            break;
        case 4:
            runTask(&begin);//задача
            break;
        case 0:
            printf_s("Work is finished\n");
            deleteStack(&begin);
            t = NULL;
            if (begin == NULL) {
                puts("Memory is Freed!");
            }
            _getch();
            break;
        default:
            printf_s("No!\n");
            _getch();
            break;
        }
    }
}
 
void createStack(Stack **t, Stack **begin) {
    *t = new Stack;
    if (*t != NULL) {
        printf_s("Stack is already created!");//есть элементы
        _getch();
        return;
    }
    printf_s("Creating Stack: \n");
    int count;
    printf_s("Enter number of elements in your initial stack: \n");
    scanf_s("%d", &count);
    for (int i = 0; i < count; i++) {
        addElementInStack(t, begin, i);
    }
    _getch();
}
 
void addElementInStack(Stack **t, Stack **begin, int info) {
    printf_s("Adding element: %d\n", info);
 
    if (*t == NULL) {
        *t = new Stack;
        (*t)->info = info;
        (*t)->next = *begin;
        *begin = *t;
    }
    else {
        *t = new Stack;
        (*t)->info = info;
        (*t)->next = *begin;
        *begin = *t;
    }
 
}
void viewStack(Stack *begin) {
    printf_s("Viewing Stack: \n");
 
    Stack *t = begin;
    if (begin == NULL){
        printf_s("Stack is empty! \n");
        _getch();
        return;
    }
    while (t != NULL){
        printf_s("Element: %d\n", t->info);
        t = t->next;
    }
 
    _getch();
}
Это все,что у меня есть...
вот как-то перебрать именно значения из ячеек и как-то в такие рамки записать. ...%5=0&&...%2!=0

Решение задачи: «Односвязный список: удаление элементов,заканчивающихся на 5»

textual
Листинг программы
void deleteStack(Stack **begin){
    Stack* t;
    while (*begin != NULL) {
        t = *begin;
        *begin = (*begin)->next;
        delete(t);
    }

Объяснение кода листинга программы

  1. В функции deleteStack определен тип данных Stack* (указатель на структуру Stack).
  2. В функции deleteStack объявлен указатель t на структуру Stack.
  3. В функции deleteStack объявлен указатель begin на указатель на структуру Stack.
  4. В функции deleteStack выполняется цикл while, который выполняется до тех пор, пока указатель begin не станет равным NULL.
  5. Внутри цикла while значение указателя t присваивается значению указателя *begin.
  6. Значение указателя *begin присваивается значению next структуры *begin.
  7. Значение указателя t удаляется с помощью функции delete.
  8. После выполнения цикла while указатель begin будет указывать на последний элемент списка.
  9. Если список пуст, то указатель begin будет равен NULL.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы