Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2010, 19:36   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
Сообщение удаление из списка(си)

Код, описаный ниже, создает список, содержащий вид спорта и представителя. Нужно еще и удалять из списка, но у меня не выхожит
(функция pop() - удаление).
Что не так?

Код:
struct spis{
char c[20];// вид спорта
char fio[300];
spis *next, *next1;
}*p,*cur,*prev,*top, *top1;

void push(int n);
void pop();
void fill_list1();
void show(spis *top_list, int list_number);

int i;

int main()
{
int n;
printf("razmer:\n");scanf("%i",&n); getchar();
top=0;
int done=false;char key,value;
while(!done){
system("cls");
    printf("\n A)dd\nS)sow(0)\nD)elete\n Q)uit\n");
    key=getchar();
    switch(toupper(key)){
case 'A':
push(n);
fill_list1();
break;
case 'S':
show(top,0);
fflush(stdin);
show(top1,1);
getch();
break;
case 'Q':
    done=true;break;
case 'D':
    pop();
    break;
    }
}

return 0;}


void push(int n)
{
int t=1;
for(;n;n--)
{
p=new spis;
printf("[%i]sport :\n",n);
fflush(stdin);
gets(p->c);
printf("input predstavitelya:\n");
printf("[%i]fio:\n",n); t++;
gets(p->fio);
p->next=NULL;
if(top==NULL) top=p;
cur=top;
prev=NULL;
while(cur && p->c > cur->c && p->fio>cur->fio)
{
prev=cur;
cur=cur->next;
}
if(cur==NULL) prev->next=p;
else if(prev)
{
p->next=cur;
prev->next=p;
}
else
{
top=p;
p->next=top==cur?NULL:cur;
}
}
}

      void pop()
{
         prev=top;cur=top->next;
         printf("\n Inpup for del:\n");
         scanf("%s",&p->c);
if(p->c==top->c) 
{
    p=top;
    top=top->next;
    free (p);
}
else
{
    while(cur!=NULL && cur->c!=p->c)
    {
        prev=cur;
        cur=cur->next;
    }
    if(cur!=NULL)
    {
        p=cur;
        prev->next=cur->next;
        free (p);
    }
}
}
void show(spis *top_list, int list_number)
{
p=top_list;
if(p==NULL)
printf("\n Spisok is empty\n");
else
printf("\nSpisok^^:\n");
while(p){
    
printf("%2s %4s\n",p->c,p->fio);
p=list_number?p->next1:p->next;
    }
}

void fill_list1()

{int parity =0;
  struct spis *p1=0;
  p=top;

  while(p)
  {if(parity)   {if(p1) p1->next1=p;
                 p1=p;
                 if(!top1) top1=p;}

   p=p->next;
   parity=!parity;
  }

  if(p1) p1->next1=0;
}
zhenya.ya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элемента из списка Ghost_gg Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2010 20:43
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
удаление элемента из списка yagluboko Помощь студентам 1 10.04.2010 14:54
Удаление элементов из списка. grave123 Общие вопросы C/C++ 0 10.03.2010 15:33
удаление элемента из списка aurora_87 Общие вопросы C/C++ 1 18.06.2009 14:02