Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
GameOverD2
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 3
1

Удалить k-й элемент списка

07.06.2018, 13:50. Просмотров 298. Ответов 0

Организация списков с помощью указателей и структур
Дана программа:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include "locale.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 Udalenie(struct EL_SP **p)
{
    struct EL_SP *i;
    struct EL_SP *j;  
 
        for (i = *p;i->sled != NULL; i = i->sled) { // Доходим до последнего элемента 
            j = i;
        }
 
        if (i == *p) {  // если в списке один элемент
            *p = NULL;
            free(i);   // освобождение памяти
        }
        else{  // иначе удаляем последний элемент
            j->sled = NULL;
            free(i);
        }
}
 
         /*----------------------------------------------------------*/
         /*      функция определения кол-ва идент-ов в списке        */
         /*----------------------------------------------------------*/
 
 
void Opred(struct EL_SP **p)
{
    struct EL_SP *i;
    struct EL_SP *j;  
 
        for (i = *p;i->sled != NULL; i = i->sled) { // Доходим до последнего элемента 
            j = i;
        }
 
        if (i == *p) {  // если в списке один элемент
            *p = NULL;
            free(i);   // освобождение памяти
        }
        else{  // иначе удаляем последний элемент
            j->sled = NULL;
            free(i);
        }
}
 
 
 
 
 
         /*----------------------------------------------------------*/
         /*              функция печати списка                       */
         /*----------------------------------------------------------*/
 
    void PechSp (  struct EL_SP *p )
            /*  Вх. данные:  p - указатель начала списка    */
 
    {   setlocale(LC_ALL,"RUS");
        struct EL_SP *i;  /* указатель текущего элемента списка */
        printf ("\nРезультат:\n");
        for ( i=p; i!=NULL; i=i->sled )
            puts (i->id);
    }
 
        /*-----------------------------------------------------------*/
        /*      О С Н О В Н А Я   П Р О Г Р А М М А      */
        /*-----------------------------------------------------------*/
 
   void main()
 
    {  
        setlocale(LC_ALL,"RUS");
        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();
    }


Нужно переписать 2 функции:
1. функция удаления к-го по прядку элемента
2. функция определения кол-ва идент-ов в списке

Голова кипит,не понимаю,как сделать.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2018, 13:50
Ответы с готовыми решениями:

Удалить элемент из списка и добавить новый элемент
Здравствуйте уважаемые!! Помогите пожалуйста! Создать список из 10...

Удалить из списка k-й по порядку элемент
Помогите отладить код, абсолютно ничего не понимаю.Задание-Удалить из списка...

Удалить каждый третий элемент из списка
Написать прогу создания и обработки списка(беда), каждый элемент которого...

Список: Найти и удалить максимальный элемент списка
Сформировать однонаправленный список, в котором будут храниться целые числа....

Переместить последний элемент списка в начало списка
Ребята, помогите пожалуйста, мне нужно написать программу. Я только начала...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2018, 13:50

Удалить из списка неуспевающих
Структура содержит фамилию и 4 оценки. Удалить из списка неуспевающих

Удалить повторяющиеся элементы из односвязного списка
Я написал программу, которая удаляет дубликаты в списки, оставляя только его...

Удалить слова из списка, соответствующие шаблону
Здраствуйте, помогите пожалуйста с программой. Задание такое, вводится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru