Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Help в исправлении кривого кода, функции работы со списками. 
:(
    Опции темы
AlexeySheglov
Дата 19.5.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



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

Код

#include <stdio.h>
#include <stdlib.h>
const int k = 4;
    struct gorod{
        char g[20];
        long int n;
        struct group * next;
        struct group * prev;
    } ga[k];

    struct gorod*InsertFirst(struct gorod *list_ptr, struct gorod *new_ptr){
        if (list_ptr==NULL || new_ptr==NULL){
            return list_ptr;
        }
        list_ptr->prev=new_ptr;
        new_ptr->next=list_ptr;
        return new_ptr;
    }
    
    int print(struct gorod *list_ptr){
        while(list_ptr!=NULL){
            printf("%s %d\n",list_ptr->g, list_ptr->n);
            list_ptr=list_ptr->next;//Смещение указателя на элемент списка с предыдущего к последующему
        }
    return 0;
    }

    struct gorod*search(struct gorod*ptr, int kluch){
        while(ptr!=NULL){
            if ((ptr->n*ptr)==kluch){
                return ptr;
            }
            ptr=ptr->next;
        }
        return 0;
    }

    struct gorod*delet(struct gorod*ptr,struct gorod*list_ptr){
        if(ptr->prev!=NULL){//элемент не первый?
            ptr->prev->next=NULL;//удаляем связь предыдущего с данным
        }
        else{
            if(ptr->next!=NULL){//элемент не последний?
                ptr->next->prev=NULL;//удаляем связь последующего с даннам
            }
            list_ptr=ptr->next;
        }
        if(ptr->next!=NULL){//элемент не последний?
            ptr->next->prev=ptr->prev;//удаляем связь последующего с данным
        }
        free(ptr);
        return list_ptr;
    }

int main(){
    struct gorod *list=NULL, *el;
    int i; 
    float    kluch;
    printf("Vvedite struktutu\n");
    for (i=0; i<k; i++){
        el=malloc(sizeof(struct gorod)); //выделение памяти под элемент
        scanf("%s %d",el->g, &el->n); //считывание значений полей элемента
        el->next=el->prev=NULL; //обнуление полей-указателей
        list=InsertFirst(list, el); //вставка элемента
        if (list==NULL) list=el; //вставка элемента в пустой список
    }
    printf("Proverka raboti funkcii print\n");
    print(list);
    printf("Vvedite dannie dlya poiska\n");
    scanf("%f", &kluch);
    el=search(list, kluch);
    if(el==NULL){
        printf("Poisk ne dal rezultatov\n");
    }
    printf("%s  %d\n",el->g, el->n);
    list=delet(el, list);
    print(list);
    getchar();
    return 0;
}


17 ошибок. кто может прошу помочь.
PM MAIL   Вверх
zim22
Дата 19.5.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



0 ошибок
Код

#include <stdio.h>
#include <stdlib.h>
const int k = 4;
    struct gorod{
        char g[20];
        long int n;
        struct gorod * next;
        struct gorod * prev;
    } ga[k];

    struct gorod*InsertFirst(struct gorod *list_ptr, struct gorod *new_ptr){
        if (list_ptr==NULL || new_ptr==NULL){
            return list_ptr;
        }
        list_ptr->prev=new_ptr;
        new_ptr->next=list_ptr;
        return new_ptr;
    }
    
    int print(struct gorod *list_ptr){
        while(list_ptr!=NULL){
            printf("%s %d\n",list_ptr->g, list_ptr->n);
            list_ptr=list_ptr->next;//Смещение указателя на элемент списка с предыдущего к последующему
        }
    return 0;
    }

    struct gorod*search(struct gorod*ptr, int kluch){
        while(ptr!=NULL){
            if ((ptr->n)==kluch){
                return ptr;
            }
            ptr=ptr->next;
        }
        return 0;
    }

    struct gorod*delet(struct gorod*ptr,struct gorod*list_ptr){
        if(ptr->prev!=NULL){//элемент не первый?
            ptr->prev->next=NULL;//удаляем связь предыдущего с данным
        }
        else{
            if(ptr->next!=NULL){//элемент не последний?
                ptr->next->prev=NULL;//удаляем связь последующего с даннам
            }
            list_ptr=ptr->next;
        }
        if(ptr->next!=NULL){//элемент не последний?
            ptr->next->prev=ptr->prev;//удаляем связь последующего с данным
        }
        free(ptr);
        return list_ptr;
    }

int main(){
    struct gorod *list=NULL, *el;
    int i; 
    float    kluch;
    printf("Vvedite struktutu\n");
    for (i=0; i<k; i++){
        el=(gorod*)malloc(sizeof(struct gorod)); //выделение памяти под элемент
        scanf("%s %d",el->g, &el->n); //считывание значений полей элемента
        el->next=el->prev=NULL; //обнуление полей-указателей
        list=InsertFirst(list, el); //вставка элемента
        if (list==NULL) list=el; //вставка элемента в пустой список
    }
    printf("Proverka raboti funkcii print\n");
    print(list);
    printf("Vvedite dannie dlya poiska\n");
    scanf("%f", &kluch);
    el=search(list, kluch);
    if(el==NULL){
        printf("Poisk ne dal rezultatov\n");
    }
    printf("%s  %d\n",el->g, el->n);
    list=delet(el, list);
    print(list);
    getchar();
    return 0;
}



--------------------
PM MAIL   Вверх
AlexeySheglov
Дата 19.5.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



ну точно эксперт!оперативно. спасибо.
тока вот в поиске как-то не так что ли работает и еще предупреждения выдает:
warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data
warning C4996: 'scanf' was declared deprecated
warning C4996: 'scanf' was declared deprecated.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.