Удаление элемента в списке - C (СИ) (79393)

Узнай цену своей работы

Формулировка задачи:

Проблема: нужно удалить элемент, но я не понимаю как связать то, что я введу для удаления с функцией pop(); Т.е. если бы у меня были данные символьные, а не строки, я бы написал так:
void pop(char value);
...
p->aa=value;
...
case 'D':
printf("input for delete:");
value=getch();
pop(value);
ВОТ ВЕСТЬ КОД:
struct list{
        char aa[22];
        list *next;
        struct list2 *p2,*cur2,*prev2,*top2;
}*p,*top,*prev,*cur;
struct list2{
        char xx[22];
        list2 *next;
};
 
void push()
{
        top=0;
        int n,i,k=0;
        printf("\n size:\n");
        scanf("%i",&n);
        printf("\n Input:\n");
        for(;n;n--)
        {
                p=new list;
                scanf("%s",&p->aa);
                p->next=NULL;
                while(cur && p->aa >cur->aa)
                {
                        prev=cur;
                        cur=cur->next;
                }
                if(prev==NULL)
                {
                        p->next=top;
                        top=p;
                }
                else
                {
                        p->next=cur;
                        prev->next=p;
                }
        }
        p=top;
        while(p)
        {
                printf("%s",p->aa);
                printf("\n size (inside):\n");
                scanf("%i",&i);
                printf("\n input: ( push into inside\n");
                for(;i;i--)
                {
                        p->p2=new list2;
                        scanf("%s",&p->p2->xx);
                       if(!k){
                                p->top2=NULL;
                                p->cur2=NULL;
                                p->prev2=NULL;
                                k++;
                        }
                        p->p2->next=NULL;
                        while(p->cur2 && p->p2->xx > p->cur2->xx)
                        {
                                p->prev2=p->cur2;
                                p->cur2=p->cur2->next;
                        }
                        if(p->prev2==NULL)
                        {
                                p->p2->next=p->top2;
                                p->top2=p->p2;
                        }
                        else
                        {
                                p->p2->next=p->cur2;
                                p->prev2=new list2;
                                p->prev2->next=p->p2;
                        }
                }
                k=0;
                p=p->next;
        }
}
void pop()
{
    prev=top;
    cur=top->next;
    if(p->aa==top->aa)
    {
p=top;
top=top->next;
free (p);
    }
    else
    {
        while( cur!=NULL && p->aa!=cur->aa)
        {
            prev=cur;
            cur=cur->next;
        }
if(cur!=NULL)
{
    p=cur;
    prev->next=cur->next;
free (p);
}
    }
}
void show()
{
        p=top;
        if(p==NULL) printf("\n list is empty\n");
        while(p)
        {
                printf(" %s",p->aa);
                p->p2=p->top2;
                while(p->p2)
                {
                        printf("\n    %s\n",p->p2->xx);
                        p->p2=p->p2->next;
                }
                p=p->next;
        }
        system("PAUSE");
}
int main()
{
    int done=false;
    char key;
    while(!done)
    {
        system("cls");
        printf("\nA)dd\nD)elete\nQ)uit\nS)how\n");
        key=getchar();
        switch(toupper(key))
        {
        case 'A':
        push();
        break;
        case 'S':
        show();
        break;
        case 'D':
            char value[44];
            printf("\n input for del:\n");
            gets(value);
            if(strcmp(value,p->aa)==0)
            pop();
            break;
        case 'Q':
            done=true;
            break;
        }
    }
    return 0;
}

Решение задачи: «Удаление элемента в списке»

textual
Листинг программы
struct node1 {
    char aa[22];
    struct node1 *next;
};
 
struct node2 {
    char bb[22];
    struct node2 *next;
};

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы