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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2008, 20:44   #11
zven_
Пользователь
 
Регистрация: 16.10.2008
Сообщений: 18
По умолчанию

сделал. запустилась программа. спасибо остается мне понять как она работает и тогда все гут будет))
zven_ вне форума Ответить с цитированием
Старый 24.10.2008, 21:04   #12
NjaalkemeBit
Пользователь
 
Регистрация: 19.10.2008
Сообщений: 32
По умолчанию

)) давай... Succes'а!
NjaalkemeBit вне форума Ответить с цитированием
Старый 26.10.2008, 13:59   #13
zven_
Пользователь
 
Регистрация: 16.10.2008
Сообщений: 18
По умолчанию

мне б хотелось создать двунаправленный список через
Код:
struct tagList
{
int nInfo;
tagList* pNext;
tagList* pPrev;
}
а дальше... уже ступор...
но сомневаюсь в этом коде может прально а может и не прально...
Код:
tagList *pCurrent; // этот элемент нужно выдернуть 
 
tagList *pNext = pCurrent->pNext; 
if (pNext) 
{ 
// есть следующий элемент,  
  pNext->pPrev = pCurrent->pPrev; 
} 
else 
{ 
// это последний элемент, нужно поправить заголовок 
  Head.pPrev = pCurrent->pPrev; 
} 
 
tagList *pPrev = pCurrent->pPrev; 
if (pPrev) 
{ 
// есть предыдущий элемент,  
  pPrev->pNext = pCurrent->pNext; 
} 
else 
{ 
// это первый элемент, нужно поправить заголовок 
  Head.pNext = pCurrent->pNext; 
}
может... я не то делаю )
ну кто мне поможет через struct сделать двунаправленный список полностью - буду премного благодарен
а задание на 1ой странице вверху описано)
zven_ вне форума Ответить с цитированием
Старый 26.10.2008, 20:37   #14
NjaalkemeBit
Пользователь
 
Регистрация: 19.10.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от zven_ Посмотреть сообщение
мне б хотелось создать двунаправленный список через
Код:
struct tagList
{
int nInfo;
tagList* pNext;
tagList* pPrev;
}
а дальше... уже ступор...
но сомневаюсь в этом коде может прально а может и не прально...
Код:
tagList *pCurrent; // этот элемент нужно выдернуть 
...
может... я не то делаю )
ну кто мне поможет через struct сделать двунаправленный список полностью - буду премного благодарен
а задание на 1ой странице вверху описано)
Цитата:
"этот элемент нужно выдернуть"
если твое выдернуть ~= удалить из списка... то можно попробовать так,

Код:
void DeleteMe(taglist* pCurent)
{
  taglist* ePrev=pCurent->pPrev;
  taglist* eNext=pCurect->pNext;

  ePrev->pNext=eNext;
  eNext->pPrev=ePrev;
  
  //delete pCurent; //можно освобонить      
}
NjaalkemeBit вне форума Ответить с цитированием
Старый 26.10.2008, 22:51   #15
zven_
Пользователь
 
Регистрация: 16.10.2008
Сообщений: 18
По умолчанию

Чето не могу разобраться.

Код программы:
Код:
#include <string.h>
#include <stdio.h>
#include <iostream>
#include <windows.h>

using namespace std;

int m,n,i;

struct tagList
{
int nInfo; //ключевое поле
// информационные поля.
tagList* pNext; 
tagList* pPrev;
}*head;

void AddItem(int m) // функция - создание элементов
{
     tagList *pElem = new tagList;
     pElem->nInfo = m;
     pElem->pNext = head;
     head = pElem;
}


void PrintList() // функция - вывод на экран элементов
{
     tagList *elem = head;
     while (elem) 
     {
          printf("%s\n", elem->nInfo);
          elem = elem->pNext;
     }
}


void DeleteMe(tagList* pCurrent)
{	
  tagList* pPrev=pCurrent->pPrev;
  tagList* pNext=pCurrent->pNext;

  pPrev->pNext=pNext;
  pNext->pPrev=pPrev;
  
  //delete pCurrent; //можно освободить      
}

int main(int argc, int argv[])
{
	SetConsoleOutputCP(1251);
	SetConsoleCP(1251);
	
	cout <<"введите кол-во элементов"<<endl;
	cin>>n;
	cout<<"Введите эл-ты"<<endl;
	for(i=0; i<=n;i++){
		cin>>m;
	AddItem(m);
	}

	DeleteMe();
	
	PrintList();
	return 0;

}
Программулина не запускается, 1 ошибка всего то:
dvun_spisok.cpp(63) : error C2660: 'DeleteMe' : function does not take 0 parameters

как я понял, не хватает переменных, мозг сломал.. что и где вписывать переменные.. или что то не так написал программу(

Последний раз редактировалось zven_; 26.10.2008 в 23:02. Причина: были глюки с программой, а щас 1 ошибка.
zven_ вне форума Ответить с цитированием
Старый 27.10.2008, 10:13   #16
NjaalkemeBit
Пользователь
 
Регистрация: 19.10.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от zven_ Посмотреть сообщение

Программулина не запускается, 1 ошибка всего то:
dvun_spisok.cpp(63) : error C2660: 'DeleteMe' : function does not take 0 parameters

как я понял, не хватает переменных, мозг сломал.. что и где вписывать переменные.. или что то не так написал программу(
void DeleteMe(tagList* pCurrent) - удаляет один элемент из списка! А в скобках () указвывается какой.

...вот тебе компилятор и грит мол функция не запускается с 0-вым кол-вом параметров.
NjaalkemeBit вне форума Ответить с цитированием
Старый 27.10.2008, 12:13   #17
zven_
Пользователь
 
Регистрация: 16.10.2008
Сообщений: 18
По умолчанию

NjaalkemeBit,
значит нужна какая то переменая или что или я туплю?!
zven_ вне форума Ответить с цитированием
Старый 27.10.2008, 16:53   #18
NjaalkemeBit
Пользователь
 
Регистрация: 19.10.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от zven_ Посмотреть сообщение
NjaalkemeBit,
значит нужна какая то переменая или что или я туплю?!
опробуй это...

Код:
//#include <string.h>
#include <stdio.h>
#include <iostream>
//#include <windows.h>

using namespace std;

int m,n,i;

struct tagList
{
int nInfo; //ключевое поле
// информационные поля.
tagList* pNext; 
tagList* pPrev;
}*head;

void AddItem(int m) // функция - создание элементов
{
     tagList *pElem = new tagList;
     pElem->nInfo = m;
     pElem->pNext = head;
     head = pElem;
}


void PrintList() // функция - вывод на экран элементов
{
     tagList* elem = head;
     while (elem)
     {
          printf("%d\n", elem->nInfo);
          elem = elem->pNext;
     }
}

void Clear() //удаление всего списка
{
	tagList* MustDie;

	while(head)
  {
   MustDie=head;
   head=head->pNext;
   delete MustDie;
  }
}


int main(int argc, int argv[])
{

  //(1)Get mem resources & Fill information
	cout <<"введите кол-во элементов"<<endl;
	cin>>n;
	cout<<"Введите эл-ты"<<endl;
	for(i=0; i<n;i++){
		cin>>m;
		AddItem(m);
	}

  //(2)Show information
	PrintList();

  //(3)Free mem resources
  Clear();

  //Try to show again... but no... all clean... (null)
  PrintList();

  system("pause");

  return 0;

}
NjaalkemeBit вне форума Ответить с цитированием
Старый 27.10.2008, 18:10   #19
zven_
Пользователь
 
Регистрация: 16.10.2008
Сообщений: 18
По умолчанию

вот такой результат получается:
http://pic.ipicture.ru/uploads/081027/hvEySPX1BI.jpg
то есть не удаляет четные информационные поля.
zven_ вне форума Ответить с цитированием
Старый 27.10.2008, 20:15   #20
NjaalkemeBit
Пользователь
 
Регистрация: 19.10.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от zven_ Посмотреть сообщение
вот такой результат получается:
http://pic.ipicture.ru/uploads/081027/hvEySPX1BI.jpg
то есть не удаляет четные информационные поля.
теперь делит...

Код:
//#include <string.h>
#include <stdio.h>
#include <iostream>
//#include <windows.h>

using namespace std;

int m,n,i;

struct tagList
{
int nInfo; //ключевое поле
// информационные поля.
tagList* pNext; 
tagList* pPrev;
}*head;

void AddItem(int m) // функция - создание элементов
{
     tagList *pElem = new tagList;
     pElem->nInfo = m;
     pElem->pNext = head;
     head = pElem;
}


void PrintList() // функция - вывод на экран элементов
{
     tagList* elem = head;
     if (elem)
     	if (elem->pNext)
      {
      	while (elem)
     		{
          printf("%d\n", elem->nInfo);
          elem = elem->pNext;
     		}
      }
      else
      {
      	while (elem)
     		{
          printf("%d\n", elem->nInfo);
          elem = elem->pPrev;
     		}
      }
}

void Clear() //удаление всего списка
{
	tagList* MustDie;

	while(head)
  {
   MustDie=head;
   head=head->pNext;
   delete MustDie;
  }
}

void WithOutEvens()
{
 	tagList* NewListWithOutEvens=NULL;
  tagList* MustDie;
  tagList* PreviousItem;

  while(head)
	{
  	if(!(head->nInfo % 2))
    {
    	//this even
      MustDie=head;
      head=head->pNext;
      delete MustDie;
    }
    else
		{
    	//this odd, collect to new head
    	if(!NewListWithOutEvens)
  		{
        MustDie=head;
  			NewListWithOutEvens=new tagList;
        NewListWithOutEvens->nInfo = head->nInfo;
        NewListWithOutEvens->pNext=NULL;
        NewListWithOutEvens->pPrev=NULL;
        head=head->pNext;
        delete MustDie;

  		}
  		else
  		{
        MustDie=head;
        PreviousItem=NewListWithOutEvens;
  			NewListWithOutEvens=new tagList;
        PreviousItem->pNext=NewListWithOutEvens;
        NewListWithOutEvens->pNext=NULL;
        NewListWithOutEvens->pPrev=PreviousItem;
        NewListWithOutEvens->nInfo = head->nInfo;
        head=head->pNext;
        delete MustDie;
  		}
    }

  }
   head=NewListWithOutEvens;
}

int main(int argc, int argv[])
{

	cout <<"введите кол-во элементов"<<endl;
	cin>>n;
	cout<<"Введите эл-ты"<<endl;
	for(i=0; i<n;i++){
		cin>>m;
		AddItem(m);
	}

  WithOutEvens();

  PrintList();

  Clear();

  //Try to show again... but no... all clean... (null)
  PrintList();

  system("pause");

  return 0;

}
NjaalkemeBit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На списки... Neznau Паскаль, Turbo Pascal, PascalABC.NET 1 02.07.2008 19:49
Списки Вилен Общие вопросы C/C++ 3 22.05.2008 00:40
списки Влдислаав3911 Паскаль, Turbo Pascal, PascalABC.NET 5 10.05.2008 17:35
Списки AVer Паскаль, Turbo Pascal, PascalABC.NET 6 06.12.2006 23:05