Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2009, 00:59   #1
nikzntu
Пользователь
 
Регистрация: 13.01.2009
Сообщений: 10
Плохо Сортировка в списе

нужно зранить данные (номер диска, кол-во исполнителей, год выпуска ) в двухсвязном списке, создать функцию поиска по имени артиста (сделано) и отсортировать список по году издания методом шелла. С последним возникли вопросы , как его реализовать в списке
Код:
 #include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;

struct Disc
{
  int number,artist_quantity,year;
  char Name[20],AllArtists[256];
string Art;
};

struct elem{
  Disc data;
    elem *prev,*next;
    };
   
elem *first,*last,*cur;
char SearchName[30];
int n; 

void Add(){
    int h;
    elem *el=new elem;
    cout<<"Enter Dics number:"; 
    cin>>el->data.number;
    cout<<"Enter Dics Name:"; 
    cin>>el->data.Name;
    cout<<"Enter Artist quantity:"; 
    cin>>h;

      string **Art=new  string*[h];
for(int k=0; k<2;k++)
Art[k]=new  string[2];

    cout<<"Enter Artists:";

        cin>>el->data.AllArtists;
    cout<<"Enter Year:"; 

    cin>>el->data.year;

    if(first==NULL){
        el->prev=NULL;
        el->next=NULL;
        first=el;
        last=first;
    } 
    else
        if(first->next==NULL){
            el->prev=first;
            el->next=NULL;
            first->next=el;
            last=el;
        } 
        else {
            el->prev=last; 
            el->next=NULL;
            last->next=el;
            last=el;
        }
}

bool Find(elem *el){
    for(int i=0;i<n;i++)
        if(strstr(el->data.AllArtists,SearchName)) return true;  //поиск последовательности SearchName в строке AllArtists
    return false;
}

void show(){
    cout<<cur->data.number<<" "<<cur->data.Name<<" "<<cur->data.artist_quantity<<" "<<cur->data.AllArtists<<' '<<cur->data.year<<endl;
}

void main(){
    int i;
    cout<<"Enter Disc quantity:"; cin>>n;
    for(i=0;i<n;i++)
        Add();
    cout<<"Enter the name of artist which disk of you want to find:"; 
    cin>>SearchName;
    cur=first;
    for(i=0;i<n;i++){
        if(Find(cur)){show();
        }
        cur = cur->next;
    }
    getch();
}
nikzntu вне форума Ответить с цитированием
Старый 29.03.2009, 10:32   #2
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

В конце функции Add() добавляешь обработку следующего действия. Если год меньше года элемента, на который ты сейчас смотришь, то пихаешь его на это место...

И постарайся использовать глобальные переменные реже...
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 29.03.2009, 10:37   #3
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

вместо
Код:
else
        if(first->next==NULL){
            el->prev=first;
            el->next=NULL;
            first->next=el;
            last=el;
        } 
        else {
            el->prev=last; 
            el->next=NULL;
            last->next=el;
            last=el;
        }
надо
Код:
else{
    elem *spisok;
    spisok = first;
    while(1){
        if(spisok->next == NULL)break;
        if(spisok->data.year > el->data.year)break;
        spisok = spisok->next;
    }
    // Здесь вставляешь
}
Как-то так
wyvern@localhost:~$ sudo emerge --unmerge world

Последний раз редактировалось wyvern; 29.03.2009 в 10:39.
wyvern вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Сортировка Romuald Microsoft Office Excel 4 23.01.2009 13:14
Сортировка Acro Microsoft Office Excel 7 27.10.2008 18:50
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16