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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2009, 11:58   #1
levandowskiy
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 32
По умолчанию Объединить списки

Добрый день , уважаемые посетители форума)

Я продолжаю заниматься связными списками. На этот раз написал код для функции merge_lists, которая должна объединить два списка в один по принципу : первый элемент из первого списка, первый элемент из второго списка ..... последний элемент из первого списка, последний элемент из второго списка. (присоединяю pdf файл с поясненительным рисунком)

Разработал код.

Код:
#include "stdafx.h"
#include <iostream>
#include <cstddef>
using namespace std;

struct INT
{
	int num;
	INT *link;
};
typedef INT* intptr;

void insert (intptr& head, intptr& last, int number);
void input (intptr& head1, intptr& head2);
void output (intptr head);
intptr merge_lists (intptr& head1, intptr& head2);

int _tmain(int argc, _TCHAR* argv[])
{
	char ans;
	intptr head1 = NULL, head2 = NULL, head;

	do
	{
		input (head1, head2);
		head = merge_lists(head1,head2);
		cout<<"Output head1:\n";
		output(head1);
		cout<<"Output head2:\n";
		output(head2);
		cout<<"Results: ";
		output(head);



		cout<<"Continue: ";
		cin>>ans;
	} while(ans=='y'||ans=='Y');
	return 0;
}
void insert (intptr& head, intptr& last, int number)
{
	
	intptr current = new INT;
	current->num = number;
	if (!head)
	{
		head = current;
		last = head;
		last->link = NULL;
	}
	else
	{
		last->link = current;
		last = current;
		last->link = NULL;
	}
	
}
void input (intptr& head1, intptr& head2)
{
	int num, n;
	intptr last = NULL;
	cout<<"How many elements contain lists: ";
	cin>>n;
	cout<<"LIST # 1: \n";
	for (int i=0; i<n; i++)
	{
		cout<<"Element # "<<i+1<<" = ";
		cin>>num;
		insert(head1,last,num);
	}
	last = NULL;
	cout<<"LIST # 2: \n";
	for (int i=0; i<n; i++)
	{
		cout<<"Element # "<<i+1<<" = ";
		cin>>num;
		insert(head2,last,num);
	}
}
void output (intptr head)
{
	int n=1;
	if (head==NULL)
	{
		cout<<"List is empty\n";
	}
	else
	{
	for (intptr i=head; i!=NULL; i=i->link)
	{
		cout<<"Element #"<<n<<" = "<<(i->num)<<endl;
		n++;
	}
	}
}
intptr merge_lists (intptr& head1, intptr& head2)
{
	intptr temp1 = head1, temp2 = head2;
	intptr head = head1;
	head1 = NULL;
	head2 = NULL;
	while ((temp2->link)!=NULL)
	{
		temp1->link = temp2;
		temp1 = temp1->link;
		temp2->link = temp1;
		temp2 = temp2->link;		
	}
	temp1->link = temp2;
	temp2->link = NULL;

	return head;
}
После ввода почему-то все дальнейшие операции не проходят, а просто мигает курсор ...
Подозреваю, что где-то отсутствует NULL-указатель...
Подскажите где ошибка.
Заранее вас благодарю)
Вложения
Тип файла: pdf Объединение списков.pdf (15.8 Кб, 15 просмотров)
levandowskiy вне форума Ответить с цитированием
Старый 22.08.2009, 12:09   #2
levandowskiy
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 32
По умолчанию

Друзья, извиняйте пожалуйста за беспокойство) Только, что сам догадался, что надо исправить, а именно не хватало ссылок a и b для перехода по первому и второму списку

Код:
intptr merge_lists (intptr& head1, intptr& head2)
{
	intptr temp1 = head1, temp2 = head2, a, b;
	intptr head = head1;
	head1 = NULL;
	head2 = NULL;
	while ((temp2->link)!=NULL)
	{
		a = temp1->link;
		b = temp2->link;
		temp1->link = temp2;
		temp1 = a;
		temp2->link = temp1;
		temp2 = b;		
	}
	temp1->link = temp2;
	temp2->link = NULL;

	return head;
}
Спасибо всем тем , кто откликнулся)
levandowskiy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объединить процедуры (Delphi) Joy Помощь студентам 4 28.05.2009 17:23
Workbook_SheetChange помогите объединить Neo007 Microsoft Office Excel 1 04.05.2009 22:32
Объединить макросы Romuald Microsoft Office Excel 2 29.03.2009 20:09