Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2017, 22:38   #1
salegelas
Новичок
Джуниор
 
Регистрация: 23.12.2017
Сообщений: 1
По умолчанию C/C++ Поменять местами элементы списка

Здравствуйте
Вот само задание:
Дана символьная строка длиной не более 80 символов, состоящая из слов, разделенных пробелом.
Составить программу, которая вводит строку, организует из слов строки однонаправленный список,
сортируя его при вводе по длине слова. В сформированном списке поменять местами самое короткое и
самое длинное слова. Вывести на печать список до и после перестановки.

Мне осталось только поменять местами эти слова. Так как сам список я уже отсортировала, то мне по сути нужно поменять местами первый и последний элементы списка, но никак не понимаю как это сделать. Буду очень благодарна, если напишите кодом (очень-очень нужна помощь)
Вот мой код пока что:
Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <cstring>
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#pragma warning(disable : 4996)

using namespace std;

struct list
{
	char s[80];
	list *next;
	
};
int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(0, "Russian");
	list *first1, *q, *first, *p, *v, *r;
	
	int i = 1;
	char str[80];
	char *l;
	char n[] = " ";
	puts("\nВведите строку");
	gets_s(str);
	l = strtok(str, n);
	first = new list;
	first->next = NULL;
	strcpy(first->s, l);
	p = first;
	l = strtok(NULL, n);
	while (l != NULL)
	{
		q = new list;
		q->next = NULL;
		strcpy(q->s, l);
		p->next = q;
		p = q;
		l = strtok(NULL, n);
	}
	p = first;
	
	while (i == 1)//сортировка по длине слов
	{
		i = 0;
		q = first;
		r = first;
		v = first;
		while ((q != NULL) && (q->next != NULL))
		{
			if (strlen(q->next->s)<strlen(q->s))
			{
				if (q == first)
				{
					v = q->next;
					q->next = q->next->next;
					v->next = q;
					first = v;
					i = 1;
				}
				else
				{
					v = q->next;
					q->next = q->next->next;
					v->next = q;
					r->next = v;
					i = 1;
				}
			}
			r = q;
			q = q->next;
		}
	}
	p = first;
	puts("Список, отсортированный по длине слов");
	while (p != NULL)
	{
		puts(p->s);
		p = p->next;
	}
	
	getch();
	return 0;
}

Последний раз редактировалось salegelas; 23.12.2017 в 22:40.
salegelas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поменять местами э-ты списка LISP Den_Dodge Помощь студентам 0 30.05.2016 21:12
Написать программу, содержащую процедуру, которая меняет местами требуемые элементы непустого списка: 1) первый и второй элементы; scarecrow_1 Паскаль, Turbo Pascal, PascalABC.NET 1 26.04.2016 23:29
поменять элементы массива местами jekos1 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 07.03.2016 19:40
Найти максимальный и минимальный элементы списка и поменять их местами Slavik3 Общие вопросы C/C++ 4 15.10.2012 09:41
Поменять местами элементы в массиве! Angel-dm Паскаль, Turbo Pascal, PascalABC.NET 5 14.04.2010 14:59