Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

(c)Кольцевой список.

17K
27 апреля 2008 года
JKJ
32 / / 20.10.2007
Вообщем вопрос состоит в том как создать такой список и внести в него N-ое количество эллементов.
1.6K
27 апреля 2008 года
Shtirlitz
145 / / 31.07.2006
Код:
#include <iostream>
using namespace std;

struct uzel {
    int info;
    uzel *next;
};

#define exit -1

int main()
{
    uzel *start=new uzel;
    cout<<"Enter new number: ";
    cin>>start->info;
    if(start->info==exit)
    {
        delete start;
        return 0;
    }

    uzel *p=start;
   
   
    do
    {
        p->next=new uzel;
        cout<<"Enter new number: ";
        cin>>p->next->info;
        if(p->next->info==exit)
        {
            delete p->next;
            p->next=start;
        }

        p=p->next;

    }while(p!=start);

    p=start;
    do
    {
        cout<<p->info<<endl;
        p=p->next;
    }while(p!=start);

    cout<<"The end!"<<endl;
    cin>>start->info;
    return 0;
}
9
27 апреля 2008 года
Lerkin
3.0K / / 25.03.2003
2Shtirlitz: Язык программирования указан в заголовке вполне явно. Да и твой вариант применения С++ в данном контексте вызывает массу возражений. Одумайся! Одумайся и исправься!!! :D
9
27 апреля 2008 года
Lerkin
3.0K / / 25.03.2003
Вот структуры кольцевого списка:
Код:
// структура элемента списка
typedef struct
{
    struct list_item* _next;
    int _data;
} list_item;

// структура списка
typedef struct
{
    struct list_item* _begin;
    long _count;
} list;

Функции добавления\удаления\изменения\вставки\перемещения сам напишешь, или...?
17K
28 апреля 2008 года
JKJ
32 / / 20.10.2007
Буду признателен если напишите.
Хотя возможно функции добавления хватит, т.к. со списками немного знаком и по "аналогии" должно что нибудь получитсья.
9
28 апреля 2008 года
Lerkin
3.0K / / 25.03.2003
Исправление.
Код:
// структура элемента списка
typedef struct node
{
    struct node* _next;
    int _data;
} list_item;

// структура списка
typedef struct
{
    list_item* _begin;
    long _count;
} list;


Функция добавления элемента в список.
Код:
int add( lst, data )
list* lst;
int data;
{
    list_item* p;
    list_item* item = NULL;

    // если память не выделена, возвращаем ошибку
    if( !(item = (list_item*)malloc( sizeof(list_item) )) )
    return -1;

    item->_data = data;

    if( !lst->_begin )    // если запись первая, то создаем первый узел
    {
    lst->_begin = item;
    p = lst->_begin;
    }
    else          // иначе - двигаемся в конец списка
    {
    p = lst->_begin;
    while( p->_next != lst->_begin )
        p = p->_next;

    p->_next = item;  // ... и добавляем узел в конец
    }

    p->_next = lst->_begin; // зацикливаем
    lst->_count++;

    return 0;
}


Такая структура (односвязный список) не совсем удобна для добавления элементов, потому что каждый раз приходится бегать по списку. Можно ввести элемент - указатель на предшествующий [FONT="Courier New"]_begin[/FONT]'у узел. Расходов немного, а производительность при составлении списка - максимальна.

P.S. Главное, не забывать освобождать память при разрушении списка!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог