Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление элементов в список, - 
:(
    Опции темы
SectoR
Дата 8.4.2006, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.10.2005

Репутация: нет
Всего: нет



Вот сорец:
Код

#include<stdio.h>
#include<conio.h>
#include<_str.h>

struct node {
              char nvar[10];
              int zvar;
              node *ptr;
            } *current=NULL, *next, *prev;

void add(char *nvar, int zvar);

void main()
{
 /*
  for(int i=0; i<5; i++)
  {
    add("x", 10);
  }
 */

 add("name", 10);
 add("x", 1);
 add("y", 2);
 add("name", 15);
 add("z", 5);


  // View List:
  if(current==NULL)
  {
    printf("\nThe Table is empty.\n");
  }
  else
  {
    printf("\nNvar:\tZvar:\n");
    while(next!=NULL)
    {
      printf("%s\t",next->nvar);
      printf("%d\n",next->zvar);
      next=next->ptr;
    }
  }


 getch();
}

void add(char *p1, int p2)
{
  next=new node;


  strncpy(next->nvar, p1, 9);
  // добавить терминатор, если длина p1 превысит 9
  next->nvar[9] = '\0';

  *next->nvar=*p1;
  next->zvar=p2;
  next->ptr=NULL;

  if(current==NULL) current=next;
  else prev->ptr=next;
  prev=next;
  next=current;

  /* Найти узлы с одинаковым NVAR и удалить их, кроме последнего! */

  /* ... */


}


/*
Мне нужно сделать поиск по списку в отдельной функции
(можно написать и просто кусок кода, без функции), которая
проверяля бы наличие в списке прежде чем вставлять новый элемент.

Пробовал, чтобы функция поиска принимала char* (т.е. nvar) и возвращала бы bool,
но совсем запутался!



В принципе можно сформировать список, найти все повторяющиеся nvar и оставить последний пришедший, удалив остальные.
Но мне кажется это не корректным и лучше проверять совпадение nvar перед вставкой,
чем потом удалять уже вставленные элементы.

А как Вы считаете?

Вообщем надеюсь на ВАС...

P.S.: На выходе должно получиться:
Код

Nvar:        Zvar:
name        15
x        1
y        2
z        5

, а не:
Код

Nvar:        Zvar:
name        10
x        1
y        2
name        15
z        5

*/
PM   Вверх
Любитель
Дата 8.4.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Сохраняй укзатель на корень списка и действуй в ыункции прямым перебором от него и пока следующий не NULL
Код

for (node *pNode = pRoot; pNode != NULL; pNode = pNode->ptr)
{
    if (strcmp(pNode->nvar,a_nvar) == 0)
        return;
}
// а теперь добавляем



--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.