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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2010, 20:45   #1
Aerial
Пользователь
 
Аватар для Aerial
 
Регистрация: 12.04.2010
Сообщений: 17
Сообщение Проблема при создании списков(динамич. структуры) через отдельную функцию(вне main)

Собственно задание:
Код:
/*
 *	В составе программы описать функцию, которая формирует список М1 – копию списка М и список М2, 
 *	представляющий собой ”перевернутый” список М.
 *
 */
При попытке создании самоссылочных списков через отдельные функции наткнулся на проблему с указателями.
Объяснить ситуацию мне затруднительно, поэтому прошу проверить код, и посмотреть что получается. Насколько понимаю, связанно это со стеком памяти, появляющимся при исполнении функции. Прошу помочь, объяснить что и почему, если не сложно, и как можно реализовать задумку.
Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>

using namespace std;
const int N = 20;

struct node
{
	int info;
	struct node *next;
};

void CreateList(node *head);
void ShowList(node *head);
void CopyList(node *head, node *head2);
void ReversedCopyList(node *head, node *head2);
//первая функция создает список
//вторая функция выводит на экран
//третья создает список-копию исходного
//четвертая создает список-"перевернутый" исходный, так называемый стек
void main()
{
	time_t t;
	srand(time(&t));
	setlocale(LC_ALL, "RUSSIAN");

	node *head, *copy_head, *reversed_head;
	head = new node;
	copy_head = new node;
	reversed_head = new node;
	
	CreateList(head);
	CopyList(head,copy_head);
	ReversedCopyList(head,reversed_head);
	
	cout<<"Исходный список:\n";
	ShowList(head);
	cout<<"\nКопия исходного списка:\n";
	ShowList(copy_head);
	cout<<"\nКопия перевернутого списка:\n";
	ShowList(reversed_head);
	cout<<endl;

	getch();
	return;
}

void CreateList(node *head)
{
	node *p = NULL, *tail = NULL;
	
	head->info = rand()%100;
	head->next = NULL;
	tail = head;
	
	for(int i=1; i<N; i++)
	{
		p = new node;
		p->info = rand()%100;
		tail->next = p;
		p->next = NULL;
		tail = p;
	}
	return;
}

void ShowList(node *head)
{
	node *p = head;
	if (head == NULL)
		cout<<"\n\tWARNING!\n";
	while(p!=NULL)
	{
		cout<<p->info<<' ';
		p = p->next;
	}
	return;
}

void CopyList(node *head, node *head2)
{
	node *p = head, *tail = NULL, *p2 = NULL;

	head2->info = p->info;
	head2->next = NULL;
	tail = head2;
	p = p->next;
	while(p!=NULL)
	{
		p2 = new node;
		p2->info = p->info;
		tail->next = p2;
		p2->next = NULL;
		tail = p2;
		p = p->next;
	}
	return;
}

void ReversedCopyList(node *head, node *head2)
{
	node *p = head, *p2 = NULL;
	
	head2->info = p->info;
	head2->next = NULL;
	p = p->next;
	
	while(p!=NULL)
	{
		p2 = new node;
		p2->info = p->info;
		p2->next = head2;
		head2 = p2;
		p = p->next;
	}
	return;
}

Последний раз редактировалось Aerial; 22.09.2010 в 20:57.
Aerial вне форума Ответить с цитированием
Старый 22.09.2010, 22:39   #2
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
Смех

Код:
node* ReversedCopyList(node *head, node *head2)
{
	node *p = head, *p2 = NULL;
	
	head2->info = p->info;
	head2->next = NULL;
	p = p->next;
	
	while(p!=NULL)
	{
		p2 = new node;
		p2->info = p->info;
		p2->next = head2;
		head2 = p2;
		p = p->next;
	}
	return head2;
}
и соответственно в main

reversed_head=ReversedCopyList(head,reversed_head);
Farrel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема при создании xml armagedon_atyrau Microsoft Office Excel 0 01.07.2010 10:40
Ошибка при создании БД Firebird через IBExpert artemavd БД в Delphi 7 18.05.2010 22:59
Вызвать отдельную функцию в длл maxrfons Общие вопросы .NET 9 31.07.2009 20:44
Помогите переделать файловую сортировку на сортировку динамич. списков Taisja Помощь студентам 2 15.06.2008 16:10
Проблема при создании БД HAMMAN БД в Delphi 4 25.04.2008 08:44