Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

поиск по элементам динамического списка

63K
13 ноября 2010 года
boooze
5 / / 13.11.2010
Всем здраствуйте .
Я пишу курсач.В проге надо создать динамический список и реализовать всякие функции для редактирования и преобразования элементов дин.списка.
Вот для начала код списка ,а так же ввода и вывода данных из него:
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

struct info
{
int nomer;
char model [20];
char proi [20];
};

struct elem
{
info har;
elem *next;
};

elem *first, //указатель начала списка
     *last,   //указатель на очередной элемент
     *list;   //указатель на элементы списка

int n;

void vvod (){

int zn;
printf ("Vvedite dannie\n");
n = 1;
first = new elem;
(*first).har.nomer = n;
printf ("\nVvedite model:");
scanf ("%s", (*first).har.model);
printf ("\nVvedite proizvoditelya:");
scanf ("%s", (*first).har.proi);
first ->next = NULL;
last = first;
int flag = 1;
while (flag)
{
printf ("prodoljit?\n 1-da\n 0-net\n");
scanf ("%d", &flag);
clrscr();
if (flag){
n++;
list = new elem;
(*list).har.nomer = n;
printf ("\nVvedite model");
scanf ("%s", (*list).har.model);
printf ("\nVvedite proi:");
scanf ("%s", (*list).har.proi);
list->next = NULL;
last->next = list;
last=list;
}
}
}

void vivod (){
list = first;
clrscr;
while (list)
{
printf ("nomer: \t");
printf ("%d\n",(*list).har.nomer);
printf ("model: \t");
printf ("%s\n",(*list).har.model);
printf ("proizvoditel: \t");
printf ("%s\n",(*list).har.proi);
list=list->next;
}
getch();
}

Для начала у меня возникают проблемы в следующем:
При поиске по списку:
Код:
elem *poisk(){


            char mod;
            int flag;
            printf("введите модель = ");
            scanf("%d",&mod);
            list=last=first;
            while ((last)&&(last->har.model!=mod))
                {
                last=list;
                list=list->next;
                }
            if(!last)  printf("элемент не найден\n");
            else printf("номер %d  модель %s производитель \n" ,(*last).har.nomer,(*last).har.proi,(*last).har.model);

При поиске выдает ошибку на last->har.model!=mod,пишет cannot conver char to char * .но если делать поиск не по символьному полю ,а по числовому (например по номеру) то все в порядке.
2.Вторая проблема при добавлении элемента в конец списка:
Код:
void aite()
{
    char mod[20];
    char inc[20];
    n++;
    last=first;
    while(last->next) last=last->next;
    list=new elem;
    (*list).har.nomer=n;
        printf("\nvvedite model telephona :\n ");
    scanf("%s",mod);
    (*list).har.model=mod;
    printf("\nvvedite proizvoditelya telephona : \n");
    scanf("%s",&inc);
    (*list).har.proi=inc;
   
    list->next=NULL;
    last->next=list;
getch();
}

Ошибку выписывает на (*list).har.model=mod; и пишет "lvalue required".
3.Как прроизвести обмен элементов заданного мною списка?
Для начала я ввожу ,например,две переменные n1 и n2.
Затем ставлю указатель last и list на элементы списка ,у которых значения определенных полей совпало с введенными значениями в переменные n1 и n2.могу ли я дальше поменять элементы в списке следующим образом :
 
Код:
last=temp;   //temp - еще одна ссылка
last=list;
list=temp;

Заранее спасибо)
63K
16 ноября 2010 года
boooze
5 / / 13.11.2010
поднимаю тему
14K
16 ноября 2010 года
Fenja
138 / / 20.03.2009
Цитата:
struct elem


Зачем он? Когда можно в стуктуре с данными добавить указатель на следующий элемент?

Цитата:
пишет cannot conver char to char *


Логично, приведи уже к одному типу.

Цитата:
3.Как прроизвести обмен элементов заданного мною списка?


указетели next менять.

297
17 ноября 2010 года
koodeer
1.2K / / 02.05.2009
Начнём с того, что C++ тут почти нет, за исключением new.
Кстати, вижу new, не вижу ни одного delete.


Цитата: boooze
При поиске выдает ошибку на last->har.model!=mod,пишет cannot conver char to char *


mod объявлено как массив символов, иначе говоря - строка. Для сравнения строк в стиле Си используйте функцию strcmp.


Цитата: boooze
Ошибку выписывает на (*list).har.model=mod; и пишет "lvalue required".


Опять же, в стиле Си со строками работать нужно с помощью функций. Для копирования используйте strcpy.

63K
27 ноября 2010 года
boooze
5 / / 13.11.2010
Не могу поменять их местами .В цикле, с помощью условия, установил указатели на две нужных мне записи обмен не работает!
Код:
char mod1[20];
        char mod2[20];
        printf("vvedite pervyiy model:\n");
        scanf("%s",&mod1);
        printf("vvedite vtoryiy model:\n");
        scanf("%s",&mod2);
        list=last=first;
        while(1)
                {
                        last=list;
                        list=list->next;
                        if(!strcmp(mod1,(*list).har.model))
                                {
                                        printf("\n%d %s %s\n",(*last).har.nomer,(*last).har.model,(*last).har.proi);
                                        break;
                                }
                };
        lol=list=first;
        while(1)
                {       lol=list;
                        list=list->next;
                        if(!strcmp(mod2,(*list).har.model))
                                {
                                        printf("\n%d %s %s\n",(*lol).har.nomer,(*lol).har.model,(*lol).har.proi);
                                        break;
                                }
                };
       
        printf("\n%d %s %s\n",(*last->next).har.nomer,(*last->next).har.model,(*last->next).har.proi);
        printf("\n%d %s %s\n",(*lol->next).har.nomer,(*lol->next).har.model,(*lol->next).har.proi);
        lol2=last->next;
        last->next=lol->next;
        lol->next=lol2;
        delete lol2;
        printf("\n%d %s %s\n",(*last->next).har.nomer,(*last->next).har.model,(*last->next).har.proi);
        printf("\n%d %s %s\n",(*lol->next).har.nomer,(*lol->next).har.model,(*lol->next).har.proi);

ВВод 2 -ух записей,которые необходимо поменять\поиск на 1 запись раньше заданных\и обмен указателей next...
392
29 ноября 2010 года
cronya
421 / / 03.01.2009
Цитата: boooze

Я пишу курсач.В проге надо создать динамический список и реализовать всякие функции для редактирования и преобразования элементов дин.списка.
Вот для начала код списка ,а так же ввода и вывода данных из него:
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

struct info
{
int nomer;
char model [20];
char proi [20];
};

struct elem
{
info har;
elem *next;
};

[COLOR="Red"]elem *first, //указатель начала списка
     *last,   //указатель на очередной элемент
     *list;   //указатель на элементы списка

int n;[/COLOR]

Заранее спасибо)


В каком это университете вас учат использовать глобальные переменные таким образом. И вообще если честно все слишком запутано и много лишнего (зачем 2 структуры когда можно сделать в одной - это проще на много).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог