Удалить из списка заданный идентификатор (первый по порядку, если таких в списке несколько) - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д