Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Однонаправленные списки (стэк) / 8 сообщений из 8, страница 1 из 1
02.02.2014, 04:04
    #38546228
Kingl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Однонаправленные списки (стэк)
Написать программу по созданию, просмотру, добавлению и решению поставленной задачи для однонаправленного линейного списка (стек и/или очередь).
Создать список из случайных целых чисел в диапазоне от 1 до 10, определить наиболее часто встречающееся число и удалить его.

Как я понимаю после того как я ввел числа в стэк, мне их надо от туда извлечь, записать в строку, там удалить числа которые чаще всего повторяются и потом опять уже новую эту строку записать в стэк обратно??? Если так то подскажите как из стека преобразовать в строку, ну или может есть еще какие-то варианты?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
#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);//выходим из программы
	 }
}
...
Рейтинг: 0 / 0
02.02.2014, 04:44
    #38546231
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Однонаправленные списки (стэк)
Kingl,

Код: plaintext
1.
2.
3.
4.
5.
void exit()//функция выхода
{
   ...
   exit(0);//выходим из программы
}


Давно так не ржал. Вы изобрели первый в мире рекурсивный выход из программы в подпространство :)
(если компилировать как С, а не С++ конечно)

ЗЫ. По самому заданию - извините сейчас нет настроения разбираться, может позже.
...
Рейтинг: 0 / 0
02.02.2014, 10:26
    #38546264
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Однонаправленные списки (стэк)
Kingl,

после того как я ввел числа в стэк, мне их надо от туда извлечь, записать в строку, там удалить числа которые чаще всего повторяются и потом опять уже новую эту строку записать в стэк обратно???

ты имеешь в виду алгоритм или постановку задачи?

если алгоритм, то текут все зависит от того как написан сам стек.
если это чистый стек, то в него можно тонко push и pop. но обычно так не делают, обычно кроме этого есть еше и возможность просто побегать по списку.

Если так то подскажите как из стека преобразовать в строку, ну или может есть еще какие-то варианты?

я бы тебе предложил сначала генерировать числа и пихать в стек. потом вынимать из стека, обрабатывать и класть в другой стек. потом следующий этап обработки, и так далее.
...
Рейтинг: 0 / 0
02.02.2014, 14:45
    #38546347
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Однонаправленные списки (стэк)
KinglКак я понимаю после того как я ввел числа в стэк, мне их надо от туда извлечь,
записать в строку, там удалить числа которые чаще всего повторяются и потом опять уже
новую эту строку записать в стэк обратно???
Нет, это бред.

Тебе надо:

1) Добавить в структуру вспомогательное поле числа повторов
2) Пройти по списку и для каждого элемента посчиать число его повторов в списк (тут будет
вложенный цикл).
3) Ещё раз пройти по списку и найти максимальное число повторов.
4) Третий раз пройти по списку, удаляя из него элементы с этим максимальным числом повторов.

Всё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.02.2014, 18:41
    #38546466
Kingl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Однонаправленные списки (стэк)
Dimitry Sibiryakov,
Информация полезна. Было бы очень хорошо, если бы каждый пункт, еще пример кода написать, не обязательно с моими данными.
...
Рейтинг: 0 / 0
02.02.2014, 19:13
    #38546489
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Однонаправленные списки (стэк)
KinglБыло бы очень хорошо
Нет, это было бы уж слишком жирно. Такие примеры кода наверняка есть в Ваших конспектах.
Вы ведь писали конспекты на лекциях, не так ли?.. Вы ведь ходили на лекции?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.02.2014, 19:29
    #38546497
Kingl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Однонаправленные списки (стэк)
Dimitry Sibiryakov, Конечно ходил, но Вы должны понимать, это заочное образование, дали только так сказать основы, как создать стек, как добавить элементы, как просмотреть стек, а всякие такие алгоритмы выборки, замены элементов и все остальное сказали ищите в интернете, догадывайтесь сами, читайте книги, два дня уже я этим занимаюсь. Может скинуть конспект лекций, что бы посмотреть что нам дали на занятиях?(
...
Рейтинг: 0 / 0
03.02.2014, 14:57
    #38547259
Feg16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Однонаправленные списки (стэк)
KinglКонечно ходил ... должны понимать это заочное образованиеНаверное надо было идти на дневное на полные 5 лет курса. Иначе смысл Нам понимать что Вам неохота понимать? :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Однонаправленные списки (стэк) / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]