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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2015, 18:10   #1
DarkVoin
Новичок
Джуниор
 
Регистрация: 03.02.2015
Сообщений: 2
По умолчанию Сортировка двусвязного списка простыми вставками

Помогите дописать функцию сортировки простыми вставками.
Код:
#pragma hdrstop

#include <tchar.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
// ---------------------------------------------------------------------------
using namespace std;

struct List {
	int data;
	List *prev, *next;
};

typedef List* ListPtr;

void InsertHead(ListPtr & h, int a);
ListPtr form(char nf[]);
void ShowList(List * h);
void Sort();
#pragma argsused

int _tmain(int argc, _TCHAR* argv[]) {

	char file[5][50] = {
		"E:/kurs/1.txt", "E:/kurs/2.txt", "E:/kurs/3.txt"
	};
	int N = 2, i;
	ListPtr P[10];
	for (i = 0; i < N; i++) {
		P[i] = form(file[i]);
	}
	clrscr();
	for (i = 0; i < N; i++) {
		cout << i << '.';
		ShowList(P[i]);

	}
	for (i = 0; i < N; i++) {
		cout << i << '.';
		Sort();
		ShowList(P[i]);
	}

	getch();
	return 0;
}

// ************************************************************
void InsertHead(ListPtr &h, int a) {
	ListPtr tmp = new List;
	tmp->data = a;
	tmp->next = tmp->prev = h;
	h = tmp;
}

ListPtr form(char nf[]) {
	ifstream F;
	ListPtr h = NULL, t;
	F.open(nf);
	if (F.fail()) {
		cout << "error";
		getch();
		exit(1);
	}
	int a;
	F >> a;
	h = new List;
	h->data = a;
	h->next = h->prev = NULL;
	t = h;
	while (F >> a) {
		t->next = new List;
		t->next->prev = t;
		t = t->next;
		t->data = a;
		t->next = NULL;
	}
	F.close();
	return h;
}

void ShowList(List *h) {
	List *tmp = h;
	cout << "spisok" << endl;
	while (tmp != NULL) {
		cout << tmp->data << " ";
		tmp = tmp->next;
	}
	cout << endl;
}

void Sort() {
	ListPtr t;
	t = h->next;
	while (t) {
		x = t->data;
		ListPtr b = t;
		while (x < b->prev->data && t->prev != NULL)
Эту часть функции написал учитель и сказал что осталось пару строк, но я ни как не пойму что нужно дописать уже весь мозг сломал. Заранее спасибо.




________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 04.02.2015 в 11:05.
DarkVoin вне форума Ответить с цитированием
Старый 17.02.2015, 04:39   #2
DarkVoin
Новичок
Джуниор
 
Регистрация: 03.02.2015
Сообщений: 2
По умолчанию

C сортировкой разобрался. Помогите теперь написать функцию получения одного нового упорядоченного списка, образованного узлами исходных списков, используя метод прямого слияния.
Код:
// ---------------------------------------------------------------------------

#pragma hdrstop

#include <tchar.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
// ---------------------------------------------------------------------------
using namespace std;

struct List {
	int data;
	List *prev, *next;
};

typedef List* ListPtr;

void InsertHead(ListPtr & h, int a);
ListPtr form(char nf[]);
void ShowList(List * h);
void Sort(ListPtr &h);
#pragma argsused

int _tmain(int argc, _TCHAR* argv[]) {

	char file[5][50] = {
		"E:/kurs/1.txt", "E:/kurs/2.txt", "E:/kurs/3.txt"
	};
	int N = 3, i;
	ListPtr P[10];
	for (i = 0; i < N; i++) {
		P[i] = form(file[i]);
	}
	//cout<<"P="<<P[0]<<endl;
	//clrscr();
	for (i = 0; i < N; i++) {
		cout << i+1 << ' ';
		ShowList(P[i]);

	}
	cout << "Sortirovka" <<endl;
	for (i = 0; i < N; i++) {

	   cout << i+1 << ' ';

	   Sort(P[i]);
	   ShowList(P[i]);
	}

	getch();
	return 0;
}

// ************************************************************
void InsertHead(ListPtr &h, int a) {
	ListPtr tmp = new List;
	tmp->data = a;
	tmp->next = tmp->prev = h;
	h = tmp;
}

ListPtr form(char nf[]) {
	ifstream F;
	ListPtr h = NULL, t;
	F.open(nf);
	if (F.fail()) {
		cout << "error";
		getch();
		exit(1);
	}
	int a;
	F >> a;
	h = new List;
	h->data = a;
	h->next = h->prev = NULL;
	t = h;
	while (F >> a) {
		t->next = new List;
		t->next->prev = t;
		t = t->next;
		t->data = a;
		t->next = NULL;
	}
	F.close();
	return h;
}

void ShowList(List *h) {
	List *tmp = h;
	cout << "spisok" << endl;
	while (tmp != NULL) {
		cout << tmp->data << " ";
		tmp = tmp->next;
	}
	cout << endl << endl;
}

void Sort(ListPtr &h ) {
	ListPtr t;
	int x;
	//cout<<"h="<<h;
	t = h->next;
	while (t) {
		x = t->data;
		//cout << "x=" <<x<<endl;
	  ListPtr b = t->prev;
		while (b != NULL && x < b->data)
		   {b->next->data=b->data;
			b=b->prev;
					}
		if (b == NULL) h->data=x;
	 else b->next->data=x;
	   t=t->next;
			}  }
DarkVoin вне форума Ответить с цитированием
Старый 17.02.2015, 08:39   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вот ЗДЕСЬ всё по сортировкам.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка простыми вставками Akcentbek Паскаль, Turbo Pascal, PascalABC.NET 1 30.04.2012 01:04
Сортировка списка методом выбора и простыми вставками Bottane4ka Помощь студентам 0 24.03.2012 20:35
сортировка простыми вставками Valentinka25 Паскаль, Turbo Pascal, PascalABC.NET 1 03.04.2011 22:48