#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);
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();
}
{
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;
last=list;
list=temp;
Заранее спасибо)
поднимаю тему
Цитата:
struct elem
Зачем он? Когда можно в стуктуре с данными добавить указатель на следующий элемент?
Цитата:
пишет cannot conver char to char *
Логично, приведи уже к одному типу.
Цитата:
3.Как прроизвести обмен элементов заданного мною списка?
указетели next менять.
Кстати, вижу new, не вижу ни одного delete.
Цитата: boooze
При поиске выдает ошибку на last->har.model!=mod,пишет cannot conver char to char *
mod объявлено как массив символов, иначе говоря - строка. Для сравнения строк в стиле Си используйте функцию strcmp.
Цитата: boooze
Ошибку выписывает на (*list).har.model=mod; и пишет "lvalue required".
Опять же, в стиле Си со строками работать нужно с помощью функций. Для копирования используйте strcpy.
Код:
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);
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...
Цитата: 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]
#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 структуры когда можно сделать в одной - это проще на много).