K
kingl
Написать программу по созданию, просмотру, добавлению и решению поставленной задачи для однонаправленного линейного списка (стек и/или очередь).
Создать список из случайных целых чисел в диапазоне от 1 до 10, определить наиболее часто встречающееся число и удалить его.
Как я понимаю после того как я ввел числа в стэк, мне их надо от туда извлечь, записать в строку, там удалить числа которые чаще всего повторяются и потом опять уже новую эту строку записать в стэк обратно??? Если так то подскажите как из стека преобразовать в строку, ну или может есть еще какие-то варианты?
Создать список из случайных целых чисел в диапазоне от 1 до 10, определить наиболее часто встречающееся число и удалить его.
Как я понимаю после того как я ввел числа в стэк, мне их надо от туда извлечь, записать в строку, там удалить числа которые чаще всего повторяются и потом опять уже новую эту строку записать в стэк обратно??? Если так то подскажите как из стека преобразовать в строку, ну или может есть еще какие-то варианты?
C++:
#include<stdio.h>//для работы с потоками ввода вывода
#include<malloc.h>//для работы с динамической памятью
#include<conio.h>//для работы с консолью
#include<locale.h>//для подключения русского языка
#include<stdlib.h>//стандартная библиотека
struct Stack
{
int info;
Stack *Next;
};
Stack *begin, *t;
Stack* Create(Stack *);//функция типа Stack для создания стэка
void prosm();//функция для просмотра содержимого стэка
void exit();//функция выхода и освобождения памяти
void main()//главная функция определяющая работу всей программы
{
int punkt,rp;//вводим целочисленные переменные: punkt-для определения пункта меню, rp-для выполнения цикла заполнения стэка
setlocale(LC_CTYPE,"Russian");//подключаем русский язык
do//начало цикла для работы меню программы
{
fflush(stdin);//чистим буфер
system("cls");//чистим экран
printf ("Выберите пункт меню:\n");
puts("1-создание списка;");
puts("2-просмотр списка;");
puts("3-добавление элементов списка;");
puts("4-решение поставленной задачи;");
puts("0-выход;");
scanf("%d",&punkt);//вводим число соответствующее пункту меню
switch (punkt)//цикл выбранного пункта меню
{
case 1:case 3://если выбран пункт 1 или пункт 3
{
system("cls");//чистим экран
rp=1;//присваиваем переменной значение 1 для осуществления работы цикла заполнения стэка
if (punkt==1)//если меню 1
{
begin=NULL;//стэк пуст
}
while(rp)//пока значение переменной rp не 0 цикл будет работать
{
begin=Create(begin);//вершине стэка присваиваем значение t которое возвращает вызванная функция
printf("Для прекращения ввода введите-0: ");
scanf("%d",&rp);//вводим число для переменной rp по которому будет определена дальнейшая работа цикла
}
break;//прерываем цикл выходим в меню
}
case 2:prosm();break;//при выборе пункта меню 2 вызываем функцию просмотра содержимого стэка
case 0: exit();break;//при выборе пункта меню 0 вызываем функцию выхода из программы
}
}
while(1);//цикл меню программы выполняется бесконечно
_getch();//ввод любой клавиши
}
Stack* Create(Stack *begin)
{
Stack *t = (Stack*)malloc(sizeof(Stack));
printf("\n Введите элемент списка:");
scanf("%d", &t -> info);
t -> Next = begin;
return t;
}
void prosm()
{
Stack *t = begin;
if(begin == NULL) {
puts(" Стек пуст! ");
return;
}
while( t != NULL) {
printf(" %d \n", t->info);
t = t -> Next;
}
_getch();
}
void exit()//функция выхода
{
system("cls");//чистим экран
while(begin!=NULL)//цикл будет работать пока стэк неопустеет
{
t=begin;//текущему значению присвоим значение вершины
begin=t->Next;//вершине присвоим значение следующего элемента
free(t);//очистим текущее значение
}
if(begin==NULL)//проверим стэк на наличие элементов
puts("Память очищена! Нажмите любую клавишу для выхода!");//выводим сообщение
_getch();//нажимаем любую клавишу
exit(0);//выходим из программы
}
}