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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Visual c++] Динамические списки+сортировка списка 
:(
    Опции темы
Age
Дата 19.6.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написать функции:
- добавление элемента в начало двусвязного списка;
- добавление элемента в конец двусвязного списка;
- добавление элемента в любое место списка (в порядке возрастания);
- удаление одного элемента;
- удаление всего списка;
- вывод списка на экран;
- main(), демонстрирующая работу всех функций.
Ниже приведена программа реализуящая эта задача. Однако немогу с ней разобраться. Хотелось бы чтобы вы дали подробное описание функционирования(по возможности прописать комментарии) с того места где я пометил что нуждаюсь в комментариях.
Код

#include <stdafx.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <conio.h>
using namespace std;


struct bibl
{
    char nazv[20];
    char autor[20];
    int god;
    bibl *p;
    bibl *n;


};

int en=0;
bibl *start=0,*end=0;


void add_s()
{
    bibl *card=new (bibl);
    cout<<"vvedi nazv book -> ";    cin.getline (card->nazv,20);
    cout<<"vvedi autor book -> ";    cin.getline (card->autor,20);
    cout<<"vvedi god -> ";            cin>>card->god;
    cin.ignore();
    cout<<'\n';

        if(start==0)
        {
            start=card;
            end=card;
            card->p=0;
            card->n=0;
            return;
        }
            card->p=0;
            card->n=start;
            start->p=card;
            start=card;
}

void add_e()
{
    bibl *card=new (bibl);    
    cout<<"vvedi nazv book -> ";    cin.getline (card->nazv,20);
    cout<<"vvedi autor book -> ";    cin.getline (card->autor,20);
    cout<<"vvedi god -> ";            cin>>card->god;
    cin.ignore();
    cout<<'\n';

        if(start==0)
        {
            start=card;
            end=card;
            card->p=0;
            card->n=0;
            return;
        }
            end->n=card;
            card->p=end;
            end=card;
            card->n=0;
}

void add_o()
{
    bibl *card=new (bibl);
    cout<<"vvedi nazv book -> ";    cin.getline (card->nazv,20);
    cout<<"vvedi autor book -> ";    cin.getline (card->autor,20);
    cout<<"vvedi god -> ";            cin>>card->god;
    cin.ignore();
    cout<<'\n';

    if(start==0)
    {
        start = card;
        end = card;
        card->p = 0;
        card->n = 0;
        return;
    }
    if(card->god <= start->god)
    {
        card->n = start;
        start->p = card;
        card->p = 0;
        start = card;
        return;
    }
    if(card->god > end->god)
    {
        card->n = 0;
        end->n = card;
        card->p = end;
        end = card;
        return;
    }

    bibl *p,*p2;
p=start;//нуждаюсь в комментариях
p2=start->n;//нуждаюсь в коммнтарияз

    while (!(card->god > p->god && card->god <= p2->god))
    {        
            p=p2;
            p2=p2->n;
    }
            p->n=card;
            card->n=p2;
            p2->p=card;
            card->p=p;
}

void del_b()
{
    int god;
    bibl *p = start,*p2=start->n;

    cout << "Vvedi god ->  ";
    cin >> god;

    if(start== 0)
            return;

    if(start == end)
    {
        if(start->god == god)
        {
            delete start;
            start = 0;
            end = 0;
            return;
        }
    }
    
    if(start->god == god)
    {
    start=start->n;
    delete p;
    return;
    }

    while (p2!=0)
    {
        if(p2->god==god)
        {
            p->n=p2->n;
            delete p2;
            return;
        }
        p=p2;
        p2=p2->n;
    }
   return;
}


void del()
{
bibl *p=start;
while (p!=0)
{
    p=p->n;
    delete(start);
    start=p;
}
}

void print_s()
{
bibl *p;
p=start;

    while (p!=0)
    {
        cout<<'\n';
        cout<<"nazv book -> "<<p->nazv;
        cout<<'\n';
        cout<<"autor book -> "<<p->autor;
        cout<<'\n';
        cout<<'\n';
        cout<<"god -> "<<p->god;
        cout<<'\n';

        p=p->n;
        cout<<'\n';
    }
}


void menu()
{
    cout<<"1: Dobavlenie v nachalo";
        cout<<'\n';

    cout<<"2: Dobavlenie v end";
        cout<<'\n';

    cout<<"3: Dobavlenie v other";
        cout<<'\n';

    cout<<"4: Vivod Bcex knig -> ";
        cout<<'\n';

    cout<<"5: Delete one knig";
        cout<<'\n';

    cout<<"6: Delete all knig";
        cout<<'\n';

    cout<<"0: EXIT";
        cout<<'\n';
}

int main(int argc, _TCHAR* argv[])
{
char ac;
menu();
    ac=getch();
    while(true)
    {

        switch(ac)
        {
            case '1':
                add_s();
                menu();
                break;

            case '2':
                add_e();
                menu();
                break;

            case '3':
             add_o();
                menu();
                break;

            case '4':
                print_s();
                menu();
                break;

            case '5':
                del_b();
                menu();
                break;

            case '6':
                del();
                menu();
                break;

            case '0':
                del();
                return 0;

            default:
                cout << "Habral NE to !!!";
                cout<<'\n';
                menu();
                break;
        }
    }
} 


Также прошу написать функцию сортироовки динамического списка методом вставки.
У меня есть программа сортировки ВЫБОРКОЙ(вроде) но мне надо сортировку вставкой.
Пример сортировки:
Код


#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{    
    int a[10];
    cout << "Bvedite masiv\n";
    for (int i=0; i<10; i++)
    {
        cin >> a[i];
    }
    cout << "neotsorterobano: ";
    for (int i=0; i<10; i++)
    {    
        cout << a[i] << " ";
    }
    for (int i=1; i<10-1; i++)
    {    int s = 0;
        for (int j=10-1; j>=i; j--)
        {    if (a[j]<a[j-1])
            {    int tmp = a[j];
                a[j] = a[j-1];
                a[j-1] = tmp;
                s = 1;
            }
        }
        if (!s) break;
    }
    cout << "\n\nOtsorterovano:   ";
    for (int i=0; i<10; i++)
    {    cout << a[i] << " ";
    }
    cout << endl;
    return 0;
}


Заранее благодарен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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