Удалить из списка заданный идентификатор (первый по порядку, если таких в списке несколько) - C (СИ)

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

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

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #define  MAXDL    9      /* макс.длина ид-ра  (строки символов с
                                                признаком конца '\0' )         */
    struct EL_SP                /* тип элемента списка  */
    {   char  id [MAXDL];       /* идентификатор   */
         struct EL_SP *sled;        /* ссылка на следующий элемент  */
    };
 
         /*-------------------------------------------------------------------------------*/
         /*   функция включения очередного идентификатора в список  */
         /*-------------------------------------------------------------------------------*/
 
    void  Vkl ( struct EL_SP **p, char t_id[] )
            /* Вх. данные: *p   - указатель списка идентификаторов в
                                        лексикографическом порядке,
                                    t_id - включаемый в список (текущий) ид-р */
            /* Вых. данные: *p                                       */
    {  struct EL_SP  *pt,       /* указатель включаемого эл-та  */
                            *k,*j;       /* указатели очередного и предыдущего
                                           элементов списка        */
               /* выделение памяти для нового эл-та списка  */
        pt = (struct EL_SP *) malloc(sizeof(struct EL_SP));
        strcpy(pt->id, t_id);
        if (*p==NULL || strcmp(pt->id,(*p)->id) < 0)
        {   /* включение ид-ра в начало списка */
             pt->sled=*p; *p=pt;
        }
        else
        {       /* поиск элемента списка, после которого нужно
                     включить идентификатор */
             k=*p;
             while (k!=NULL && strcmp(pt->id,k->id)>=0)
             {  j=k;  k=k->sled; 
     }
   /* включение эл-та *pt после элемента *j  */
               j->sled=pt; pt->sled=k;
        }
    }
         /*----------------------------------------------------------*/
         /*              функция печати списка                       */
         /*----------------------------------------------------------*/
 
    void PechSp (  struct EL_SP *p )
            /*  Вх. данные:  p - указатель начала списка    */
    {  struct EL_SP *i;  /* указатель текущего элемента списка */
        printf ("\nРезультат:\n");
        for ( i=p; i!=NULL; i=i->sled )
            puts (i->id);
    }
 
        /*-----------------------------------------------------------*/
        /*      О С Н О В Н А Я   П Р О Г Р А М М А      */
        /*-----------------------------------------------------------*/
 
    main()
    {  struct EL_SP  *p;    /* указатель начала списка     */
        unsigned  n ;         /* количество идентификаторов  */
        unsigned  i ;          /* параметр цикла              */
        char t_id[MAXDL];    /* текущий идентификатор       */
 
        printf ("\nВведите число идентификаторов\n n=");
        scanf ("%u",&n);
        getchar();   /* пропуск символа "перевод строки" */
        p=NULL;      /* список пока пуст */
        printf ("Введите идентификаторы ");
        printf ("(после каждого нажимайте клавишу <Enter> )\n");
        for ( i=1; i<=n; i++ )
        {   gets (t_id);
             Vkl (&p,t_id);  /* включение ид-ра в список */
        }
        PechSp (p);         /* печать списка */
        printf ("\n\nДля завершения нажмите любую клавишу\n");
        getch();
    }
Не знаю как удалить из списка заданный идентификатор. Помогите!

Решение задачи: «Удалить из списка заданный идентификатор (первый по порядку, если таких в списке несколько)»

textual
Листинг программы
#include <iostream>
 
using namespace std;
 
struct item{
    item * nextItem;
    item * prevItem;
    int number;
};
void print(item * it)
{
    while(it)
    {
        cout << it->number;
        it = it->nextItem;
    }
}
void deleteItem(item * it)
{
    item * pr, * next;
    pr = it->prevItem;
    next = it->nextItem;
    delete it;
    if(pr && next)
    {
        pr->nextItem = next;
        next->prevItem = pr;
    }
}
int main(int argc, char* argv[])
{
    item * firstItem;
    item * currentItem = NULL;
 
    for (;;)
    {
        cout << "Please, input some number or input -1 to go away: ";
        int number;
        cin >> number;
        if(number == -1)
            break;
        item * newCurrentItem = new item;
        newCurrentItem->nextItem = newCurrentItem->prevItem = NULL;
        newCurrentItem->number = number;
 
        if(currentItem)
        {
            currentItem->nextItem = newCurrentItem;
            newCurrentItem->prevItem = currentItem;
        }
        else
            firstItem = newCurrentItem;
 
        currentItem = newCurrentItem;
    }
    system("pause");
    return 0;
}

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


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

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

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