1 / 0 / 0
Регистрация: 17.04.2014
Сообщений: 18
1

Удаление элемента связанного списка

29.12.2014, 16:59. Показов 856. Ответов 1
Метки нет (Все метки)

Здравствуйте, у меня есть программа и нужно удалить элемент из связанного списка по порядковому номеру под которым он выводится при отображении элементов списка на экран:

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
138
#include "stdio.h"
 #include "ctype.h"
 #include "stdlib.h"
 #include "math.h"
 #include "string.h"
 #define SIZE 100
double dummy = sin(0.0);
 
struct sputnik {
char nazvanie[30];
char nazvanie_main[30];
 
int year;
float d;
int period;
struct sputnik *next;
};
int main(void){
char choice;
int punkt;
int i, count=0;
struct sputnik *head=NULL;
struct sputnik *prev,*current;
int res,kolvo,j,number;
struct sputnik a[SIZE];
system("clear");
while(1){
    printf("Viberite punkt menu: ");
    printf ("1-Vvod \n 2-Vivod \n 3-Zapis v fail \n 4-Chnenie iz faila \n 5-Dobavit sputnik \n 6-Izmenit polia sputnika \n 7-Udalenie zapici \n 8-Vihod \n");
    scanf("%d",&punkt);
    while(getchar()!='\n') continue;
    switch(punkt){
        case 1:
            while(1){
                printf("Sozdat novuu tablicy ili dopisat v staruu (N-new;O-old)");
                choice=toupper(getchar());
                if (choice=='N'){
                    count=0;
                    prev=head;
                    while(prev != NULL){
                        current=prev->next;
                        free(prev);
                        prev=current;
                        }
                    head=NULL;
                    }
                if (choice!='N'&& choice !='O'){
                    while(getchar()!='\n') continue;
                    continue;
                    }
                while(getchar()!='\n') continue;
                break;
                }
            for ( ; ;count++){
                current = (struct sputnik *)malloc(sizeof(struct sputnik));
                if (head==NULL) head=current;
                else prev->next=current;
                current->next = NULL;
                printf("Vvedite nazvanie %d sputnika :", count+1);
                gets(current->nazvanie);
                printf ("Vvedite nazvanie planeti :");
                gets(current->nazvanie_main);
                printf ("Vvedite god otkritia :");
                scanf("%d",&current->year);
                while(getchar()!='\n') continue;
                printf("Vvedite diametr :");
                scanf("%f",&current->d);
                while(getchar()!='\n') continue;
                printf("Period obrachenia :");
                scanf("%d",&current->period);
                while(getchar()!='\n') continue;
                prev=current;
                printf("Zakonchit vvod?:y/n: \n");
                if (toupper(getchar()) =='Y'){
                    count++;
                    break;
                }
                else {
                while(getchar()!='\n') continue;
                continue;
                };
            }
            break;
            case 2:
                if (head==NULL) printf ("Dannie ne vvedensi \n");
                else printf("Spisok sputnikov: \n");
                current=head;
                i=0;
                while(current!=NULL) {
                printf("%d sputnik - %s planeta %s god %d diametr %4.3f period %d\n",++i, current->nazvanie,current->nazvanie_main, current->year,current->d,current->period);
                current=current->next;
                }
                break;
            case 3:
                break;
            case 4:
                break;  
            case 5:
                break;
            case 6:
                break;
            case 7:
                int nummer;
                printf(" Vvedite nomer zapisi kotoryu nuzno udalit :\n");
                scanf ("%d",&nummer);
                while(getchar()!='\n') continue;
                current=head;
                i=0;
                while(current!=NULL) {
                if (i==nummer-1){
                    prev=current;
                    free(current);
                    current = prev->next;
                }
                else 
                {current=current->next;
                i=i+1;}
                
                }
                break;
            
            case 8:
                prev=head;
                while(prev!=NULL){
                    current=prev->next;
                    free(prev);
                    prev=current;
                }
                printf("Programma zavershila rabitu \n");
                return 0;
                break;
            default:
                printf ("Punkt vibran ne verno! \n");
                break;
            }
    }
return 0;
}
Удаление заданного элемента пытался реализовать в case 7 , однако ничего не удаляется. Элементы списка отображаются при вызове case 2. Может кто-нибудь подскажет как правильно сделать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2014, 16:59
Ответы с готовыми решениями:

Удаление первого элемента из списка
Нужно удалить 1-ый элемент списка. #include <stdio.h> #include <stdlib.h> #include...

Удаление элемента из односвязного списка
Почему не работает функция удаления идентификатора? Как ее можно переделать? #include"stdafx.h"...

Удаление элемента из односвязного списка
помогите, пжлста, уже мучаюсь несколько дней, нужна незамысловатая функция,которая удаляет...

Удаление элемента из односвязного списка
Есть односвязный список из 50 целых случайных неуникальных чисел, допустим от 1 до 1000 вида:...

1
23 / 13 / 47
Регистрация: 23.03.2013
Сообщений: 157
14.01.2015, 18:44 2
http://ermak.cs.nstu.ru/cprog/html/063.htm
C
1
2
3
4
5
6
7
8
9
10
11
12
13
list *Remove(list *&pp, int n)
{
    list *q;                                           // Указатель на текущий элемент
    for (q = pp; q!=NULL && n!=0; q = q->next, n--);   // Отсчитать n -ый
    if (q==NULL) return NULL;                          // нет элемента с таким номером
    if (q->prev==NULL)                                 // удаление первого -
        pp=q->next;                                    // коррекция заголовка
    else     q->prev->next = q->next;                  // следующий для предыдущего  =
    // следующий за текущим
    if (q->next!=NULL)                                 // удаление не последнего -
        q->next->prev = q->prev;                       // предыдущий для следующего  =
    return q;
}                                                      // предыдущий текущего
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2015, 18:44
Помогаю со студенческими работами здесь

Удаление максимального элемента из однонаправленного списка
//программа создания однонапрвленного целого списка #include<stdio.h> #include<locale.h> struct...

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

Удаление текущего элемента из односвязного списка
Доброго времени суток. Возникла такая проблема. В интернете везде удаление элемента из односвязного...

Сортировка связанного списка
Доброго времени! =) имеется структура, ссылающаяся на саму себя и определения собственных типов...

Очередь на базе списка: добавление элемента, удаление, поиск в очереди, вывод на экран
Может у кого есть готовое решение этого задания, буду Вам очень признателен. Желательно что бы...

Как осуществить загрузку двунаправленного связанного списка из файла?
имеется функция записи(естественно Employer это структура)void savelist(Employer *p, char* fname)...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru