Страница 1 из 1
элементы списка
Добавлено: 08 апр 2010, 20:55
Евгений Александрович
(Ввести с клавиатуры число и поместить его перед тем элементом списка, который больше него. )
Непросто как-то

думаю как-то так: (но это явно не так делается)
p=top;
if(my_num<p->c){
prev=num;
num=cur->next;
}
КАк же это реализовать(если можно, то попроще и с коментариями) .
вот код:
Код: Выделить всё
struct spis{
char c;
spis *next;
}*p,*cur,*prev,*top;
void push(char value);
void show();
int main()
{
top=0;
int done=false;
char key,value;
while(!done)
{
system("cls");
show();
printf("\nA)dd\nQ)uit\n");
key=getchar();
switch(toupper(key))
{
case 'A':
printf("\nEnte a value:\n");
value=getch();
push(value);
break;
case 'Q':
done=true;
break;
}
}
return 0;
}
void push(char value)
{
printf("\n Inpus\n");
p=new spis;
p->c=value;
p->next=NULL;
while(cur!=NULL && value > cur->c)
{
prev=cur;
cur=cur->next;
}
if(prev==NULL)
{
p->next=top;
top=p;
}else
{
prev->next=p;
p->next=cur;
}
}
void show()
{
p=top;
if(p==0)
{
printf("\nSpisok is empty\n");
}
else
printf("\nSipok:\n");
while(p)
{
printf("%c\n",p->c);
p=p->next;
}
}
Re: элементы списка
Добавлено: 09 апр 2010, 16:29
Albor
Твоя беда в том, что функция вставки начинается с неизвестного текущего элемента (переменная cur). Функцию нужно пределать примерно так:
Код: Выделить всё
void push(char value)
{
printf("\n Inpus\n");
p=new spis;
p->c=value;
p->next=NULL;
if(top==NULL) top=p;
cur=top;
while(cur && value>cur->c)
{
prev=cur;
cur=cur->next;
}
if(cur == NULL)prev->next=p;
else if(prev)
{
p->next=cur;
prev->next=p;
}else
{
top=p;
top->next=top==cur?NULL:cur;
}
}
Re: элементы списка
Добавлено: 09 апр 2010, 17:36
Albor
добавь строчку prev=NULL; перед циклом.
Re: элементы списка
Добавлено: 12 апр 2010, 19:09
Евгений Александрович
Переделал как у Вас.
Хм... а как же сделать вот это:
ввести с клавиатуры число и поместить его перед тем элементом списка, который больше него.
Re: элементы списка
Добавлено: 13 апр 2010, 10:57
Albor
А разве не так сделано? Вставляется после меньшего и перед большим чем value. Как итог - сортированный список. Сколько бы данных не вводил, результат должен выводится по возрастанию.
Re: элементы списка
Добавлено: 13 апр 2010, 14:53
Евгений Александрович
Как-то я не осознал принцип работы. Что у меня не так:
Код: Выделить всё
struct spis{
int c;
spis *next;
}*p,*top,*cur,*prev;
void push();
void show();
void push1();
int value1,value,n;
int main(){
top=NULL;
printf("\n N:\n");
scanf("%i",&n);
push();
push1();
show();
getch();
}
void push(){
printf("\nInput(push):\n");
for(;n;n--)
{
p=new spis;
p->c=value;
scanf("%i",&value);
p->next=NULL;
while(cur!=NULL && value > cur->c){
prev=cur;
cur=cur->next;
}
if(prev==NULL){
p->next=top;
top=p;
}
else{
prev->next=p;
p->next=cur;
}
}
}
void show(){
p=top;
if(p==NULL)
printf("\nqueue is empty\n");
else
printf("\nspisok:\n");
while(p){
printf("%i\n",p->c);
p=p->next;
}
}
void push1()
{
printf("\n Input(push1):\n");
p=new spis;
p->c=value;scanf("%i",&value);
p->next=NULL;
if(top==NULL) top=p;
cur=top;
prev=NULL;
while(cur && value>cur->c)
{
prev=cur;
cur=cur->next;
}
if(cur == NULL)prev->next=p;
else if(prev)
{
p->next=cur;
prev->next=p;
}else
{
top=p;
top->next=top==cur?NULL:cur;
}
}
Re: элементы списка
Добавлено: 13 апр 2010, 15:28
Albor
Евгений Александрович писал(а):Что у меня не так:
Евгений Александрович, вот объясни, с какого перепуга ты изменил сигнатуру ф-ции push()? Данная функция вставляет данные, значит она должна получать эти данные. Сейчас выходит, что она сама знает что вставлять. Изначально приведенный код вполне работоспособен с некоторыми поправками. И, я бы не использовал глобальные переменные во всех функциях, лучше объявить свой "комплект" в каждой, который благополучно уничтожится по окончании работы одной функции и никак не повлияет на работу другой. Ошибки ж искать легче.
Re: элементы списка
Добавлено: 13 апр 2010, 15:40
Евгений Александрович
ААа

до меня дошло как Вы мне помогли!
я просто думал что нужно тупо изначально вводить какоето число, а затем уже во введенный список заталкивать его в нужное место.
Огромное сам СПАСИБО.
.
Re: элементы списка
Добавлено: 13 апр 2010, 15:41
Евгений Александрович
Вам *

( от радости напутал)