Односвязный список: удаление элементов,заканчивающихся на 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);
}
Объяснение кода листинга программы
- В функции
deleteStackопределен тип данныхStack*(указатель на структуруStack). - В функции
deleteStackобъявлен указательtна структуруStack. - В функции
deleteStackобъявлен указательbeginна указатель на структуруStack. - В функции
deleteStackвыполняется циклwhile, который выполняется до тех пор, пока указательbeginне станет равнымNULL. - Внутри цикла
whileзначение указателяtприсваивается значению указателя*begin. - Значение указателя
*beginприсваивается значениюnextструктуры*begin. - Значение указателя
tудаляется с помощью функцииdelete. - После выполнения цикла
whileуказательbeginбудет указывать на последний элемент списка. - Если список пуст, то указатель
beginбудет равенNULL.