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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кольцевой список, проблема с циклом 
:(
    Опции темы
Sandir
Дата 7.5.2013, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
 
typedef struct NODE {
    int value;
    struct NODE * next;
} node_t;
 
void push(node_t ** pRing, int nValue) {
    node_t * pNode = malloc(sizeof(node_t));
    assert ( pNode );
    pNode->value = nValue;
    if ( ! *pRing ) {
        pNode->next = pNode;
        *pRing = pNode;
    }
    else {
        pNode->next = (*pRing)->next;
        (*pRing)->next = pNode;
        *pRing = pNode;
    }
}
 
void rotate(node_t ** pRing, int steps) {
    assert ( *pRing && steps > 0 );
    while ( steps-- )
        *pRing = (*pRing)->next;
}
 
 
int top(const node_t * ring) {
    return ring->value;
}
 
int is_empty(const node_t * ring) {
    return ( ! ring );
}
 
int shift(node_t ** pRing) {
    int ret;
    assert ( *pRing );
    ret = (*pRing)->value;
 
    if ( (*pRing)->next == *pRing ) {
        free(*pRing);
        *pRing = NULL;
    }
    else {
        node_t * pPrev = (*pRing)->next;
        while ( pPrev->next != *pRing )
            pPrev = pPrev->next;
        pPrev->next = (*pRing)->next;
        free(*pRing);
        *pRing = pPrev->next;
    }
 
    return ret;
}

node_t * find(const node_t * ring, const int value) {
    const node_t * current = ring;
    do {
        if ( current->value == value )
            return (node_t*)current;
        current = current->next;
    } while ( current != ring );
    return NULL;
}

int main(void) {
    node_t * ring = NULL;
    int count, i, value;
    
    printf("Number of elements: ");
    assert ( scanf("%d", &count) == 1 && count > 0 );
    for ( i = 0; i < count; ++i ) {
        printf("Value #%d: ", i + 1);
        assert( scanf("%d", &value) == 1 );
        push(&ring, value);
    }
    
    rotate(&ring, 1);
    
    while ( ! is_empty(ring) )
        printf("%d ", shift(&ring));
 
    return 0;
}


все функции есть, осталось связать всё это в main() надо организовать цикл который находит N-й элемент(функция find() ) удалит его (фукция shift() ), далее с (N+1)-ого элемента повторяет и так пока не останется 1 элемент.
PM MAIL   Вверх
feodorv
Дата 7.5.2013, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Sandir @  7.5.2013,  19:28 Найти цитируемый пост)
надо организовать цикл который находит N-й элемент(функция find() ) удалит его (фукция shift() ), далее с (N+1)-ого элемента повторяет и так пока не останется 1 элемент

Вообще не понятно. Функция find находит элемент со значением value (кстати, в начале find() нужно провериться на непустоту списка), а не по номеру. Но даже так не понятно, как вообще может остаться 1 элемент...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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