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

Циклический односвязный список - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.74
skMaster
3 / 3 / 2
Регистрация: 26.02.2013
Сообщений: 38
26.02.2013, 12:06     Циклический односвязный список #1
Есть такой код, писал сам. В с++ я чайник, такчто сильно прошу не пинать.
Вообщем прога компилится, но падает с ошибкой, при запуске( Что нетак, ткните плиз носом! =)
Пишу в CodeBlocks, компилирую с помощью MinGW (идет в комплекте).
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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
struct element{
    string data;
    element *next;
};
 
element *head=NULL;
 
void add(string data)
{
    element *cur = head;
    element *temp = new element;
    if(head==NULL)
    {
        head->data=data;
        head->next=head;
    }
    else
    {
        while(cur->next!=head)
        {
            cur=cur->next;
        }
        temp->data=data;
        temp->next=head;
        cur->next=temp;
    }
}
 
int main()
{
    add("Element 1");
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 12:06     Циклический односвязный список
Посмотрите здесь:

Односвязный список C++
C++ Односвязный список.
Односвязный список C++
C++ Односвязный список
C++ Односвязный циклический список!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 12:12     Циклический односвязный список #2
C++
1
2
3
if(head==NULL)
{
    head->data=data;
Странно, правда?)
skMaster
3 / 3 / 2
Регистрация: 26.02.2013
Сообщений: 38
26.02.2013, 12:13  [ТС]     Циклический односвязный список #3
Цитата Сообщение от Schizorb Посмотреть сообщение
C++
1
2
3
if(head==NULL)
{
    head->data=data;
Странно, правда?)
head у нас получается всегда NULL ??? (для меня си++ темный лес, и работаю со списками первый раз)

или мне надо создать нвый элемент, а потом сделать head=temp; ???
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 12:16     Циклический односвязный список #4
Ну да, тут попытка разыменовать нулевой указатель. Я предполагаю, ты хотел что-то такое сделать:

C++
1
2
3
4
5
6
if(head==NULL)
{
    head = temp;
    head->data=data;
    head->next=head;
}
skMaster
3 / 3 / 2
Регистрация: 26.02.2013
Сообщений: 38
26.02.2013, 13:12  [ТС]     Циклический односвязный список #5
Спасибо, вроде то что надо) Просто еще несовсем осознал как этот список устроен) Щас попробую, может что и получится)

----------------------------------------------------------
Большое спасибо!) Элементы начали добавляться!!!

Добавлено через 54 минуты
ОФФТОП: А могу ли я сделать так?
C++
1
2
3
4
5
6
7
8
9
struct element{
    string name;
    string data;
    int x;
    int y;
    int z;
};
 
element *base[65535];
Ну всмысле правильно ли это будет?)
Тоесть суть вопроса, можно ли так объявить массив элементов типа element, или лучше чтото другое использовать в данном случае?)
kran69
0 / 0 / 0
Регистрация: 26.02.2013
Сообщений: 9
26.02.2013, 13:29     Циклический односвязный список #6
ты linked list пытаешся построить? ты можешь запихнуть в массив примитивы, объекты и структуры (главное что-бы все одного типа были). У меня вопрос - зачем? Если я правильно понял, и ты пытаешся построить linked list - то тебе не надо каждый нод запихивать в массив, надо что-бы ноды друг на друга указывали.
skMaster
3 / 3 / 2
Регистрация: 26.02.2013
Сообщений: 38
26.02.2013, 13:32  [ТС]     Циклический односвязный список #7
В основном посте да - linked list. А вот далее, мне просто интересно, если я объявляю структуру, то потом могу ли создавать массивы из элементов с типом этой структуры?! Или так лучше не делать.
kran69
0 / 0 / 0
Регистрация: 26.02.2013
Сообщений: 9
26.02.2013, 13:37     Циклический односвязный список #8
в одвосвязных списках, тебе не надо их запихивать в массив или другие контейнеры - суть в том что каждый блок должен указывать на следущий (самое простое имплементирование) и содержать какую-то информацию. То-есть, например А->Б->В->...->Х->НУЛЛ. Еще заметил, что ты пишешь в main'е - лучше всего написать их отдельным классом и в main'е создать объект.

Добавлено через 1 минуту
Цитата Сообщение от skMaster Посмотреть сообщение
В основном посте да - linked list. А вот далее, мне просто интересно, если я объявляю структуру, то потом могу ли создавать массивы из элементов с типом этой структуры?! Или так лучше не делать.
можешь конечно; структура это, по-сути, упрощенный вариант класса - пихай их в массивы если душе угодно
skMaster
3 / 3 / 2
Регистрация: 26.02.2013
Сообщений: 38
26.02.2013, 13:44  [ТС]     Циклический односвязный список #9
Во спасибо=) Это я собственно и хотел узнать. Я просто сам ВБшник, с си/си++ еще многое пока непонятно...
А не подскаже случаем, где можно глянуть исходники для работы с сокетами на винде, и чтонить про создание параллельных потоков Thread которые =)?! НУ и на десерт работу с БД SQL/MySQL (мускул преоритетней). Ато самостоятельные поиски заканчиваются через пару часов закрыванием гугла и IDE, и включением какогонить фильма! Ибо моск просто закипает от избытка информации)))
kran69
0 / 0 / 0
Регистрация: 26.02.2013
Сообщений: 9
26.02.2013, 13:56     Циклический односвязный список #10
аам, в принципе могу подсказать пару ресурсов по БД, если с английским проблем нет - mysqltutorial.org . Mогу хорошую книгу по БД посоветовать - database management systems; тяжёлый томик, от новичка до довольно-таки интересных вещей + легко найдешь пдф учебника в гугле (на английском по-крайней мере). Всё зависит от того что именно нужно.

С сокетами и, тем-более, виндой, к сожалению, не могу помочь я с этим вообще не в теме - моя последняя винда была ХР, а с сокетами я работал когда ещё будучи студентом был )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 14:31     Циклический односвязный список
Еще ссылки по теме:

Односвязный список C++
C++ Односвязный список
C++ Односвязный список

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

Или воспользуйтесь поиском по форуму:
skMaster
3 / 3 / 2
Регистрация: 26.02.2013
Сообщений: 38
26.02.2013, 14:31  [ТС]     Циклический односвязный список #11
Ну спасибо и на этом) С английским траблов впринципе нету. Такчто буду разбираться)

Добавлено через 32 минуты
И снова вопрос по теме. Вывод всех элементов списка собственно сделал:
C++
1
2
3
4
5
6
7
8
9
10
void ShowData()
{
    element *cur=head;
    cout<<cur->data<<endl;
    while(cur->next!=head)
    {
        cur=cur->next;
        cout<<cur->data<<endl;
    }
}
А как удалять их теперь?) Допустим удалить элемент head?

C++
1
2
3
4
5
6
7
8
9
    element *temp=head->next;
    element *cur=temp;
    while(cur->next!=head)
    {
        cur=cur->next;
    }
    delete(head);
    head=temp;
    cur->next=head;
Сделал так. Тыкайте меня носом в косяки
Yandex
Объявления
26.02.2013, 14:31     Циклический односвязный список
Ответ Создать тему
Опции темы

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