Форум программистов, компьютерный форум CyberForum.ru

Связный список, удаление - C++

Войти
Регистрация
Восстановить пароль
 
diaryofsummer
1 / 1 / 0
Регистрация: 19.02.2012
Сообщений: 31
11.04.2012, 18:49     Связный список, удаление #1
написал программу работы со списком...
проблема в удалении элемента по его имени(в процедуре удаления remove подключается процедура поиска find)
но почему-то не работает поиск элемента... кажется ошибка где-то в find...
пожалуйста помогите...

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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
#define dlina 9  // макс.длина идентификаторара  (строки символов с признаком конца '\0' )       
struct SP                   // тип элемента списка  
{
    char  id [dlina];          // идентификатор   
    struct SP *next;        // ссылка на следующий элемент 
};
 
void  add(struct SP **p, char id[])
{
    struct SP  *pt,           
                  *k,*j;               
    pt = (struct SP*) malloc(sizeof(struct SP));            
    strcpy(pt->id, id); 
    if (*p==NULL || strcmp(pt->id,(*p)->id) < 0) 
    {
       pt->next=*p; *p=pt; 
    }
    else 
    { 
        k=*p; 
        while (k!=NULL && strcmp(pt->id,k->id)>=0) 
        {  
            j=k;  k=k->next;
        }
        j->next=pt; pt->next=k;  
    } 
} 
 
SP* find(SP* pv, char* id, SP** prev)
{
    *prev = 0;
    while (pv)
    {
        if (strstr(pv->id, id))
            if (pv->id[strlen(id)] == ' ')
                                          return pv;        
        *prev = pv;
        pv = pv->next;      
    }
    puts("There is no idintificator\n");
    return 0;
}
 
void get_name(char* id)
{
    puts("Enter id name = ");
    gets(id);
}
 
SP* remove(SP* p)
{
    char id [dlina];
    get_name(id);
    SP* prev;
    SP* pv = find(p, id, &prev);
    if (pv)
    {
        if (pv == p)
            p = p->next;
        else
            prev->next = pv->next;
        delete pv;
    }
    return p;
}
 
void print(SP* p)
{
    SP* pv = p;
    while (pv)
    {
        printf(pv->id,'\n');
        pv = pv->next;
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    struct SP  *p; 
    unsigned  n;    
    unsigned  i;                
    char id[dlina];     
 
    printf ("\nEnter the number of identifiers\nn = "); 
    scanf ("%u",&n); 
    getchar();         
    p=NULL;    
    printf("Enter identifiers' names \n"); 
    printf("After each name press <Enter>\n"); 
    for ( i=1; i<=n; i++ )
    {  
        gets (id); 
        add(&p,id);  
    }        
    printf ("\To complete press any key \n"); 
    p=remove(p);
    getch(); 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 18:49     Связный список, удаление
Посмотрите здесь:

C++ Связный список
C++ Связный список
Список: связный список, в котором информация о книгах сортируется по убыванию стоимости. C++
Связный список (Используя структуру описания даты, построить связный список студентов, сформированный в алфавитном порядке) C++
Связный список C++
Связанный список. Создать, записать в связный список последовательность слов,обозначающих месяцы года,заданных пользователем C++
C++ Связный список; удаление равных максимальному элементов
C++ Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента
Четырёх связный список C++
C++ Связный список
C++ Связный список
Связный список C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
11.04.2012, 19:39     Связный список, удаление #2
Я бы в поиске сделал сравнение строк:

C++
1
2
if(strcmp(pv->id, id) == 0)
    return pv;
Или тебе нужно сделать поиск по подстроке с помощью strstr? Не вникал особо в код, но не понял, зачем вот эта строка:
C++
1
if (pv->id[strlen(id)] == ' ')
diaryofsummer
1 / 1 / 0
Регистрация: 19.02.2012
Сообщений: 31
11.04.2012, 19:52  [ТС]     Связный список, удаление #3
ооо спасибо)))
работает)
Yandex
Объявления
11.04.2012, 19:52     Связный список, удаление
Ответ Создать тему
Опции темы

Текущее время: 07:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru