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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2011, 00:31   #11
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

тогда придется поизучать инфу о том, как эти списки устроены.
ключевые слова для поиска: двусвязный список, односвязный список. в двух словах их структуру не опишешь, лучше найти какую-нибудь статью.
вот в качестве отправной точки что-то готовое есть тут:
http://trubetskoy1.narod.ru/alg/lists.html
http://wiki.dieg.info/doku.php/dvusvjaznyj_spisok
_Ч_ вне форума Ответить с цитированием
Старый 01.11.2011, 18:26   #12
Caged
Пользователь
 
Регистрация: 10.10.2011
Сообщений: 33
По умолчанию

Что за непонятное условие?

Код:
void add2list(TNode **pphead, int val) {
   TNode **pp = pphead, *pnew;
   while(*pp) {
      if(val < (*pp)->value)
         break;
      else 
         pp = &((*pp)->pnext);
   }
   pnew = new TNode(val);
   pnew->pnext = *pp;
   *pp = pnew;
}

Последний раз редактировалось Caged; 01.11.2011 в 18:32.
Caged вне форума Ответить с цитированием
Старый 01.11.2011, 18:34   #13
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Условие (a) эквивалентно условию (a != 0).
Abstraction вне форума Ответить с цитированием
Старый 01.11.2011, 18:46   #14
Caged
Пользователь
 
Регистрация: 10.10.2011
Сообщений: 33
По умолчанию

а оно здесь надо?
мне ж по идее только добавлять элементы надо)
Caged вне форума Ответить с цитированием
Старый 01.11.2011, 18:49   #15
Caged
Пользователь
 
Регистрация: 10.10.2011
Сообщений: 33
По умолчанию

и ещё вопрос..
Код:
#include <cstdlib>
#include <iostream>

using namespace std;

struct elem {
   char data;
   elem* link;
};

void print (elem *head) {
  elem* p=head;
  while (p) {
   cout<<p->data<< '->' ;
}           
  cout<<endl;
}   

void errase (elem *head) {
 if (head) {
  errase (head->link);
  if (head) delete head;  
 }    
}

void add2list (elem **phead, char dat){
   elem **ptr = phead, *pnew;
   while (*ptr)
        ptr=&((*ptr)->link);
    
    pnew=new elem;
    pnew->data = dat;
    *ptr = pnew;
}    
    

int main(int argc, char *argv[])
{
 char dat;   
 elem* head= 0;
 setlocale(LC_ALL,"English");
 cout<<'insert 10 char-values:'<<endl;
 for (int i=0; i<10; ++i){
   cin>>dat;
   add2list(&head, dat);
 }
 cout<<'Your list:'<<endl;
 print (head);
 errase (head);     
      
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
после выполнения выводится какая-то непонятная последовательность чисел и ничего не происходит. есть возможность вводить значения после 10ти тоже ничего не происходит(( почему?

Последний раз редактировалось Caged; 01.11.2011 в 19:16.
Caged вне форума Ответить с цитированием
Старый 02.11.2011, 00:15   #16
SteAlzzer
Пользователь
 
Аватар для SteAlzzer
 
Регистрация: 11.10.2011
Сообщений: 60
По умолчанию

Цитата:
Сообщение от _Ч_ Посмотреть сообщение
...number2 там не нужен.
Это я просто как пример того, что юзайте сколько угодно переменных в структуре.

Код:
void print (elem *head) {
  elem* p=head;
  while (p) {
   cout<<p->data<< '->' ;
}
Здесь у вас будет выводится одни и теже данные, т.к. по списку вы _не_ идете. Что бы идти по списку, в вашем случае надо сделать
Код:
p = p->data;
Код:
void add2list (elem* &phead, char dat){
elem* ptr = phead;
while(*ptr)
prt = prt->link;
    
    elem* pnew=new elem;
    pnew->data = dat;
    ptr = pnew;
}
Писал сходу, мб что-то нужно поправить, но по идее работает.
Если что, тут используется С++ механизм ссылок. Почитайте в интернете.
И вызов функции сократиться до add2list(head, dat);

А почему дает вводить больше 10и значений.. это странно. Попробуйте вместо ++i написать i++

Последний раз редактировалось SteAlzzer; 02.11.2011 в 00:26.
SteAlzzer вне форума Ответить с цитированием
Старый 02.11.2011, 19:20   #17
Caged
Пользователь
 
Регистрация: 10.10.2011
Сообщений: 33
По умолчанию

ок спасибо)
Caged вне форума Ответить с цитированием
Старый 02.11.2011, 20:34   #18
Caged
Пользователь
 
Регистрация: 10.10.2011
Сообщений: 33
Восклицание

так, вот исправленный код, но всё равно ошибка 1 вылазит(( я не пнял как исправить

Код:
#include <cstdlib>
#include <iostream>

using namespace std;

struct listI {
 char nfo;
 listI *link;
};

void add_item (listI *f, char dat){
  listI *item = new listI;
   listI *p=f;
    if (p->link == NULL) p->link = item;
    while (p->link !=NULL)
      p=p->link;        
      p->link = item;
      item->nfo = dat;
}
      

void free (listI *f){
  while (f->link != NULL){
    f=f->link; 
    delete f;
  } 
}

void print (listI *f){
  while (f->link != NULL){
   f=f->link;
   cout<< f->nfo << " ";
  }   
}

int main(int argc, char *argv[])
{
 setlocale(LC_ALL,"Russian");
  cout<<"Введите 5 значений типа char:"<<endl;
  listI *first = 0;
  char d=0;
  for (int i=0; i<5; ++i){
    cin>>d; 
    add_item(first, d);
  }  
  print (first);    
  free (first);  
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
ах да, у меня вместо слов в консоли белиберда выводится(
Caged вне форума Ответить с цитированием
Старый 02.11.2011, 22:22   #19
SteAlzzer
Пользователь
 
Аватар для SteAlzzer
 
Регистрация: 11.10.2011
Сообщений: 60
По умолчанию

что за ошибка 1?

Вы в add_item либо должны использовать ссылку, либо возвращать значение. Иначе у вас в ф-ии main значение first не меняется.

Не пробовали отладчиком пройтись?
SteAlzzer вне форума Ответить с цитированием
Старый 02.11.2011, 22:32   #20
Caged
Пользователь
 
Регистрация: 10.10.2011
Сообщений: 33
По умолчанию

"1" - это типо "одна"

пробовал, правда я ничего не понимаю(
Caged вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические списки Ольчик Паскаль, Turbo Pascal, PascalABC.NET 4 15.01.2012 14:33
Динамические списки. Светусик Паскаль, Turbo Pascal, PascalABC.NET 0 22.12.2010 17:50
динамические списки tricksler Помощь студентам 0 10.12.2010 21:15
Динамические списки Saawa Помощь студентам 4 02.12.2009 18:35
Динамические списки lubafffka Паскаль, Turbo Pascal, PascalABC.NET 6 17.12.2008 21:59