Страница 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
Евгений Александрович
Вам * :) ( от радости напутал)