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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2011, 20:05   #1
Sergey240892
Пользователь
 
Регистрация: 28.02.2011
Сообщений: 33
По умолчанию Динамический список

У меня список сделан для 5 элементов.
Ка мне можно сделать чтоб список вводился через динамическую память для n-элементов.
Код:
#include <conio.h> 
#include <stdio.h>

struct element
  {
    element * prev;
    int value;
    element * next;
   };

element* spisok (element* mas);

int main ()
 {
 	int n=5;
  element*mas=new element[n];
  printf ("vvedite elements\n");
  for(int i=0;i<5;i++)
  scanf("%d",&mas[i].value);

  spisok (mas);
  delete []mas;
 }

element*spisok (element*mas)
{
   int i;

   mas[0].prev=&mas[4];
   mas[0].next=&mas[1];

   for( int i=1;i<4;i++)
    {
     mas[i].prev=&mas[i-1];
     mas[i].next=&mas[i+1];
    }

   mas[4].prev=&mas[3];
   mas[4].next=&mas[0];

   element*start=&mas[4];

   element*end=&mas[1];

   element*current=start;
   printf("vivod\n");
   for(int i=5;i>0;i--) 
    {
    printf("% d",current->value);
    current=current->prev;
    getch();
    }
return mas;
}

Последний раз редактировалось Stilet; 18.04.2011 в 20:49.
Sergey240892 вне форума Ответить с цитированием
Старый 11.04.2011, 21:44   #2
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

На вот готовую прогу по работе с динамическим списком.
Код:
// prog.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>			// Для getch

// Описание одного элемента списка
typedef struct Item
{
	int value;
	struct Item *next;
};

// Указатель на начало односвязного списка
Item *First = NULL;

// Ввод исходных данных в односвязный список
void Input(void)
{
	Item *Curr;		// Указатель на текущий элемент списка
	int v;
	printf("Vvod posledovatel'nosti\n0 - end: ");
	while (scanf("%d", &v), v != 0)
	{
		if (First == NULL)
		{
			First = new Item;
			Curr = First;
		}
		else
		{
			Curr->next = new Item;
			Curr = Curr->next;
		}
		Curr->next = NULL;
		Curr->value = v;
	}
}

// Вывод элементов списка на экран
void Print(void)
{
	Item *Curr = First;		// Указатель на текущий элемент списка
	while (Curr != NULL)
	{
		printf("%d ", Curr->value);
		Curr = Curr->next;
	}
}

// Подсчет суммы отрицательных елементов 
int Calc(void)
{
	int Sum = 0;			// Сумма
	Item *Curr = First;		// Указатель на текущий элемент списка

	while (Curr != NULL)
	{
		if (Curr->value < 0) Sum += Curr->value;
		Curr = Curr->next;
	}

	return Sum;
}

// Перенос отрицательных элементов в конец списка
void Sort(void)
{
	Item *List1 = NULL;		// Подсписок положительных элеметов
	Item *List2 = NULL;		// Подсписок отрицательных элеметов
	Item *Curr1 = NULL;		// Указатель на текущий элемент списка1
	Item *Curr2 = NULL;		// Указатель на текущий элемент списка2

	// Разбить основной списко на два подсписка с положительными и отрицательными элементами
	while (First != NULL)
	{
		if (First->value < 0)
		{
			if (List2 == NULL)
			{
				List2 = First;
				Curr2 = List2;
			}
			else
			{
				Curr2->next = First;
				Curr2 = Curr2->next;
			}
		}
		else
		{
			if (List1 == NULL)
			{
				List1 = First;
				Curr1 = List1;
			}
			else
			{
				Curr1->next = First;
				Curr1 = Curr1->next;
			}
		}
		First = First->next;
	}

	// Объединим два списка и поместим результат в осовной
	if (Curr2 != NULL) Curr2->next = NULL;
	if (List1 != NULL)
	{
		First = List1;
		Curr1->next = List2;
	}
	else First = List2;
}

void main(void)
{
	Input();
	printf("\nIshodnyj spisok:\n");
	Print();

	printf("\n\nSumma otric.elementov = %d\n", Calc());

	Sort();
	printf("\nResult. spisok:\n");
	Print();

	// Удалить элементы списка из памяти
	while (First != NULL)
	{
		Item *Curr;		// Указатель на текущий элемент списка
		Curr = First;
		First = First->next;
		delete Curr;
	}
	printf("\n");
	getch();
}
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 11.04.2011, 21:53   #3
Sergey240892
Пользователь
 
Регистрация: 28.02.2011
Сообщений: 33
По умолчанию

Но у меня не такое задание.
Мне надо ввести список, и вывести в обратном порядке.
Sergey240892 вне форума Ответить с цитированием
Старый 12.04.2011, 18:59   #4
Sergey240892
Пользователь
 
Регистрация: 28.02.2011
Сообщений: 33
По умолчанию

Я тут исправил но она выводит только последний элемент, а потом зацикливается.

Код:
#include <conio.h> 
#include <stdio.h>

struct element
  {
    element * prev;
    int value;
    element * next;
   };

element* spisok (int N, element* mas);

int main ()
 {
 	int n=5;
	printf("Vedite kolichestvo elementov\n");
	scanf("%d",&n);
  element*mas=new element[n];
  printf ("vvedite elements\n");
  for(int i=0;i<n;i++)
  scanf("%d",&mas[i].value);

  spisok (n,mas);
  delete []mas;
 }

element*spisok (int n, element*mas)
{
	int i;
mas[0].prev=0;
mas[n-1].next=0;

for(i=1;i<n-1;i++){
mas[i].prev=&mas[i-1];
mas[i].next=&mas[i+1];
}

element *start = &mas[0];
element *end=&mas[n-1];
element *current=&mas[0];

   printf("vivod\n");
   for(int i=0;i<n-1;i++) 
    {
    printf("%d\t",current->value);
    current=current->next;
	getch();
        }
   printf("%d",current->value);
getch();
   return mas;
}

Последний раз редактировалось Sergey240892; 12.04.2011 в 19:28.
Sergey240892 вне форума Ответить с цитированием
Старый 15.04.2011, 15:41   #5
Sergey240892
Пользователь
 
Регистрация: 28.02.2011
Сообщений: 33
По умолчанию

Что тут не так?
Sergey240892 вне форума Ответить с цитированием
Старый 18.04.2011, 16:43   #6
Sergey240892
Пользователь
 
Регистрация: 28.02.2011
Сообщений: 33
По умолчанию

Я тут исправил.
Оно что-то только выводит только одно значение.
Посмотрите.
Подскажите что тут не так.
Код:
#include <conio.h> 
#include <stdio.h>

struct element
  {
    element * prev;
    int value;
    element * next;
   };

element* spisok (int N, element* mas);

int main ()
 {
 	int n;
	printf("Vedite kolichestvo elementov\n");
	scanf("%d",&n);
  element*mas=new element[n];
  printf ("vvedite elements\n");
  for(int i=0;i<n;i++)
  scanf("%d",&mas[i].value);

  spisok (n,mas);
  delete []mas;
 }

element *spisok(int n, element*mas)
{
	int i;
mas[0].prev=0;
mas[n-1].next=0;

for(i=1;i<n-1;i++){
mas[i].prev=&mas[i-1];
mas[i].next=&mas[i+1];
}
element *start = &mas[0];
element *end=&mas[n-1];
element *current=&mas[n-1];
   printf("vivod\n");
   for(int i=0;i<n-1;i++) 
    {
		printf("%d\t",current->value);
		printf("TEST %d\n",i);
		current=current->next; 
				printf("TEST2 %d\n",i);
				printf("%d\t",current->prev);
		printf("TEST3 %d\n",i);
	getch();
        }
   printf("%d",current->value);
getch();
   return 0;
}
Sergey240892 вне форума Ответить с цитированием
Старый 18.04.2011, 18:39   #7
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Код ужасен, но вроде такая функция должна получиться:
Код:
element *spisok(int n, element*mas)
{
	int i;

for(i=0;i<n;i++){
mas[i].prev=&mas[i-1];
mas[i].next=&mas[i+1];
}

mas[0].prev=0;
mas[n-1].next=0;

element *start = &mas[0];
element *end=&mas[n-1];
element *current=&mas[n-1];
   printf("vivod\n");
   for(int i=1;i<n;i++) 
    {
		printf("%d\t",current->value);
		current=current->prev; 
    }
   printf("%d",current->value);
   return 0;
}
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 18.04.2011, 20:34   #8
Sergey240892
Пользователь
 
Регистрация: 28.02.2011
Сообщений: 33
По умолчанию

russian-stalker, спасибо!
Sergey240892 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический список на Си Slame Помощь студентам 1 10.04.2011 17:39
Динамический список в С серг Общие вопросы C/C++ 9 11.03.2010 13:39
Динамический список в С серг Общие вопросы C/C++ 0 04.03.2010 19:54
Динамический список Ker_33rus Общие вопросы C/C++ 3 04.03.2010 09:32
Динамический список ... doseras JavaScript, Ajax 0 08.12.2009 17:06