|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Не работает правильно программа |
|
C/C++ - Не работает правильно программа
|
Новый участник Сообщения: 10 |
Профиль | Отправить PM | Цитировать //программа создания однонапрвленного целого списка
#include<stdio.h> #include<locale.h> struct tsp{ //1 Объявляем тип int num; tsp*next; }; tsp *Q,*P,*T;//2 Объявляем один или несколько указателей на данную структуру // Р-адрес начала списка // Q - переменная для обработки списка,а именно перемещению по нему // Т - переменная для вставки и удаления элементов из списка int main() { setlocale(LC_ALL,"rus"); //Непосредственное создание списка T=new tsp;//Создаем фиктивный элемент,зарезервировали память для фиктивного элемента списка и его адрес поместили в Т T->num=0;//Определили информациоонную часть для фиктивного элемента, этого можно не делать, так в просмотре он не участвует P=T;//В переменной Р - адрес начала списка int n,k;// n - количество реальных элементов списка, без уёта фиктивного printf("Введите количество элементов списка\n"); scanf("%d",&n); for( int i=1;i<=n;i++)//цикл добавления реальных элементов в список { Q=new tsp;//Резервируем память для нового элемента списка и его адрес помещяем в Q printf("Введите элемент списка\n"); scanf("%d",&Q->num);//Определяем информационную часть нвого элемента T->next=Q;//Соединяем его с предыдущим элементом:адрес нового подготовленного элемента,который находится в Q,помещаем в адресное поле структуры,адрес которой в T->next T=Q;//Чтобы повторить предыдущий шаг,адрес только что созданного элемента и присоедеинного к списку элемента (Q) помещаем в T //После этого присвоения этот элемент Q,а точнее T, будет играть роль предшествующего элемента,а новый элемент Q создадим } Q->next=NULL;//Последний элемент должен содержать адрес NULL,это означает,что после него в цепочке не больше элементов списка. //Начинаем просмотр списка Q=P->next;//В начале списка есть фиктивный элемент,так как он при просмотре не должен участвовать,то переходим на второй элемент списка,то есть на первый реальный. //Напоминание!В переменной P находится адрес начала списка for(int i=1;i<=n;i++) { printf("%d\n",Q->num); Q=Q->next;//Переход на следующий элемент } //Нахождение максимального элемента в списке Q=P;//Переставляем нашу переменую хождения по списку в голову списка int max = Q->num; for(int i=1;i<=n;i++) { if (Q->num > max) max = Q->num; Q = Q->next; } printf("Максимальный элемент равен = %d\n",max); Q=P; //Ищем номер первого максимального Q=P;//Переставляем нашу переменую хождения по списку в голову списка for(int i=1;i<=n;i++) { if (Q->num == max) {k=i;i=n;} else Q = Q->next; } printf("Номер первого максимального = %d\n",k-1); Q=P; for(int i=1;i<=n;i++) { if(Q->next->num==max && i!=k) { T=Q->next; Q->next=Q->next->next; T->next=NULL; delete T; } else Q=Q->next; } printf("Новый список\n"); Q=P->next; while(Q) { printf("%d\n",Q->num); Q=Q->next;//Переход на следующий элемент } return 0; } Почему программа удаляет все максимальные элементы, не оставляю первого? |
|
Отправлено: 00:32, 05-03-2015 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Вторая Ваша тема подряд с одной проблемой и без ответов, куда подевались пользователи MS Studio?
Не вникаю, просто мысли вслух..... И в первой и во второй теме идет речь о создание массива (0-11, в первой теме и интерактивное предложение ввести количество элементов в списке, сейчас). Что дальше? В одном массиве, не может быть "много" максимальных элементов, ибо выполнил цикл по созданию заданного массива и все ... далее или выход, или начинай формировать новый массив. Посмотрите алгоритм поиска максимального элемента в массиве - http://liveflowcharts.ru/sites/defau...Max/chart.html |
------- Последний раз редактировалось opel431, 05-03-2015 в 07:37. Отправлено: 00:55, 05-03-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата opel431:
|
|
Отправлено: 07:42, 05-03-2015 | #3 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать Цитата:
а при удалении if(Q->next->num==max && i!=k) k нужно увеличить на единицу в условии |
|
------- Отправлено: 10:32, 05-03-2015 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Не работает правильно программа | artyomartemyev96 | Программирование и базы данных | 4 | 09-11-2014 10:45 | |
USB Не правильно работает | snv099 | Мобильные ОС, смартфоны и планшеты | 5 | 11-08-2014 17:33 | |
ParkCity DVR HD500 не правильно работает | Devastator1985 | Видео и аудио: обработка и кодирование | 5 | 30-07-2013 22:04 | |
C/C++ - Программа календарь работает не правильно | denver-312 | Программирование и базы данных | 1 | 08-12-2007 02:01 | |
Программа не работает в XP, в w2k и w98 работает | Guest | Microsoft Windows 2000/XP | 6 | 25-05-2004 06:18 |
|