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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двухсвязные списки? 
:(
    Опции темы
Baton2007
Дата 11.9.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как удалить k узел ? Правильно я написал или нет? Подскажите как правильно!
Удаление узла
Код
#include <stdlib.h>
#include <windows.h>
#include <iostream>
struct Node {
char str[40];
int num;
Node *next;
};
Node st1 = { "xxx", 1 },
     st2 = { "yyy", 2 },
     st3 = { "zzz", 3 };
void DeleteNode(Node node) ;

int main()
{
    typedef Node *PNode;
    int q;
    printf("Vvedite nomep yzla posle kotorogo udalat");
    scanf("%d",&q);
    void Delete(PNode &Head,PNode &Tail,PNode OldNode);
}

M
bsa
Не забываем пользоваться кнопкой "код"


Это сообщение отредактировал(а) bsa - 22.10.2008, 17:43
PM MAIL   Вверх
SHraybikus
Дата 11.9.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Baton2007 @ 11.9.2008,  20:47)
Как удалить k узел ? Правильно я написал или нет? Подскажите как правильно!
Удаление узла
#include <stdlib.h>
#include <windows.h>
#include <iostream>
struct Node {
char str[40];
int num;
Node *next;
};
Node st1 = { "xxx", 1 },
     st2 = { "yyy", 2 },
     st3 = { "zzz", 3 };
void DeleteNode(Node node) ;

int main()
{
    typedef Node *PNode;
    int q;
    printf("Vvedite nomep yzla posle kotorogo udalat");
    scanf("%d",&q);
    void Delete(PNode &Head,PNode &Tail,PNode OldNode);
}

Смысл будет очевиден если добавишь к листингу комментарии  smile !
PM MAIL WWW ICQ   Вверх
IKM2007
Дата 11.9.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


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

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



Во первых это не двухсвязанный список.
Во вторых, используй кнопку КОД.
Цитата(Baton2007 @  11.9.2008,  20:47 Найти цитируемый пост)
Как удалить k узел ? Правильно я написал или нет? Подскажите как правильно!

А где определение функции 
Код

void DeleteNode(Node node) ;
?


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
vinter
Дата 11.9.2008, 21:47 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Baton2007, кончено правильно, я доавили к твоему коду еще пару ф-ий
Код

#include <stdlib.h>
#include <windows.h>
#include <iostream>
struct Node {
char str[40];
int num;
Node *next;
};
Node st1 = { "xxx", 1 },
     st2 = { "yyy", 2 },
     st3 = { "zzz", 3 };
void DeleteNode(Node node) ;
void AddNode(Node node) ;
void PrintList(List list);
void EmptyList(List list);

int main()
{
    typedef Node *PNode;
    int q;
    printf("Vvedite nomep yzla posle kotorogo udalat");
    scanf("%d",&q);
    void Delete(PNode &Head,PNode &



--------------------
Мой блог
PM MAIL WWW   Вверх
Ches
Дата 12.9.2008, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1. Почему тема называется "Двусвязные списки"? Я вижу только односвязный
2. 
Цитата(vinter @  11.9.2008,  21:47 Найти цитируемый пост)
struct Node {char str[40];int num;Node *next;};Node st1 = { "xxx", 1 },     st2 = { "yyy", 2 },     st3 = { "zzz", 3 };void DeleteNode(Node node) ;void AddNode(Node node) ;void PrintList(List list);void EmptyList(List list);

Создание класса навязывается само собой, методы сделать статическими
3.
Код

int num;
Node *next;

Если num - "номер элемента", то зачем next?
PM MAIL ICQ   Вверх
monax
Дата 14.10.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Ches @  12.9.2008,  07:30 Найти цитируемый пост)
1. Почему тема называется "Двусвязные списки"? Я вижу только односвязный

Да нет списка вообще. Я вижу структуру с указателем, чтоб сделать список, нужно его сформировать.

Цитата(Ches @  12.9.2008,  07:30 Найти цитируемый пост)
Создание класса навязывается само собой, методы сделать статическими

Зачем статическими?

Цитата(Ches @  12.9.2008,  07:30 Найти цитируемый пост)
Если num - "номер элемента", то зачем next? 

А по списку (когда он будет создан) как перемещаться? Номер не поможет, перемещение по списку идёт при помощи указателя на следующий или предыдущий элемент.
--------------------
Лаборатория программиста
PM MAIL WWW ICQ Jabber   Вверх
XmdY
Дата 21.10.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

что-то типа этого:



Код

struct Item {
    Item *next, *prev;
    int key;
};

Item *addItem(int key, Item *item) {
    if (key > 0) {
        Item *addItem = new Item;
        addItem->key = key;
        if (item == NULL) {
            return addItem;
        }
        Item *temp = item;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = addItem;
        addItem->prev = temp;
    }
    return item;
}

Item *deleteItemByKey(int key, Item *item) {
    if (item == NULL) {
        return item;
    }
    Item *temp = item;
    while (temp->next != NULL) {
        if (temp->key == key) {
            if (temp->prev != NULL) {
                temp->prev->next = temp->next;
                delete temp;
                return item;
            } else {
                Item *fr = temp->next;
                delete temp;
                return fr;
            }
            break;
        } else {
            temp = temp->next;
        }
    }
    return item;
}

Item *deleteItemByPosition(int position, Item *item) {
    int i = 1;
    if (position > 0) {
        Item *temp = item;
        while (temp->next!=NULL) {
            if(position==i){
                item = deleteItemByKey(temp->key, item);
                break;
            }else{
                temp = temp->next;
                i++;
            }
        }
    }
    return item;
}


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

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

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

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

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


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

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


 




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


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

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