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

Ваш аккаунт

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

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

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

линейные списки

55K
19 марта 2010 года
manuk
14 / / 19.03.2010
Здравствуйте, мне в эту программу надо добавить добавление станции, удаление станции, поиск станции, редактирование станции

саму прогу я написал вот с линейными списками пока не очень дружу))) помогите написать
заранее благодарен)))!!!

вот прога:
Код:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

typedef struct
{
        string station;
        int number;
        int time;
}       TRAIN, *PTRAIN;


int main()
{

        vector<TRAIN> v;
        TRAIN t;

        // Ввод
        ifstream ifs("in.txt", ios::in);
        while(ifs)
        {
                ifs >> t.station;
                ifs >> t.number;
                ifs >> t.time;

                v.push_back(t);
        }
        ifs.close();

        // Вывод
        for(int i = 0; i < v.size() - 1; ++i)
        {
                cout << "---------------------------------------" << endl;
                cout << "STATION: " << v.station << endl;
                cout << "NUMBER: " << v.number << endl;
                cout << "TIME: " << v.time << endl;
                cout << "---------------------------------------" << endl;
        }


        string name;
        cout << "enter station: ";
        cin >> name;

        // Вывод
        bool c = false;
        for(int i = 0; i < v.size() - 1; ++i)
        {
                if(name == v.station)
                {
                        cout << "---------------------------------------" << endl;
                        cout << "STATION: " << v.station << endl;
                        cout << "NUMBER: " << v.number << endl;
                        cout << "TIME: " << v.time << endl;
                        cout << "---------------------------------------" << endl;
                        c = true;
                }
        }
        if(!c)
                cout << "not found!" << endl;
}
14K
20 марта 2010 года
Fenja
138 / / 20.03.2009
manuk, тебе именно с линейными надо? А то list лучше в данном случае.
Цитата:
надо добавить добавление станции,


Добавление в конец? push_back();
в середину? используй insert();

Цитата:
поиск станции,


По какому полю поиск? По всем? По какому то одному? По идее вводишь нужный элемент, пробегаешься в цикле по вектору справнивая искомый элемент с текущим, если нашел, выводишь.

Цитата:
редактирование станции


Аналогично предыдущему, тока не выводишь,а редактируешь.

55K
20 марта 2010 года
manuk
14 / / 19.03.2010
да я согласен list лучше.
добавление мне надо и в конец и в середину
поиск надо по всем, и то же самое с редактирование
только как это реализовывать в коде, читал книжки там понятно объясняется, только на своей программе не могу сделать((((.
14K
20 марта 2010 года
Fenja
138 / / 20.03.2009
Цитата:
добавление мне надо и в конец и в середину

в конец ты уже умеешь, в середину я тебе написал как.

Цитата:
поиск надо по всем


начало у тебя уже есть :)

Цитата:
с редактирование


А как тц хочешь реализовать? Спрашивать у пользователя номер ячейки, которую будешь редактировать? Или как?

55K
20 марта 2010 года
manuk
14 / / 19.03.2010
у меня в файле храниться

athens 12 1535
moskva 124 1210
kikino 235 1646
erevan 1 1340
paris 5 1235
berlin 6 1700

и он у меня при компиляции сначало показывает всё что у меня есть
и делает поиск по станции!!))
в основном мне надо чтоб он у меня спрашивал дабавить стнацию или нет,
если да то дабавить новую станцию в файл.
ну а удалени понятно, спрашивает какой из них удалить, и удаляешь
а редактирование ну тоисть корректировка, ну то же самое что удаление за исключением,что указатель на начало списка измениться не может-ну это не обязательно!!)))
55K
21 марта 2010 года
manuk
14 / / 19.03.2010
так будет??

Код:
string station= "kiev";
        int number=96;
        int time=1835;

        TRAIN z;
        cout<<"pered vstavkoy:\n ";
        for(int i = 0; i < v.size() - 1; ++i)
        {
                cout << "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << endl;
                cout << "STATION: " << v.station << endl;
                cout << "NUMBER: " << v.number << endl;
                cout << "TIME: " << v.time << endl;
                cout << "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << endl;
        }



        ofstream outfile("in.txt", ios::in);

        {

                outfile << z.station;
                outfile << z.number;
                outfile << z.time;



                v.insert(v.begin()+2, z);

    }


тока у меня какойто бред выводит цыфры какие то вводит файл и удалеет первую станцию
14K
23 марта 2010 года
Fenja
138 / / 20.03.2009
Цитата:
в основном мне надо чтоб он у меня спрашивал дабавить стнацию или нет,


А в чем проблема? Полсе вывода таблицы вешаешь

 
Код:
cout << "Добавлять будем?";

и если да то открываваешь файл на запись, с потоками я несилен, а если было бы fopen(); то переводишь файловый указатель на конец файла через fseek и пишешь в файл.
Цитата:
бред выводит цыфры какие то вводит файл


Ты создал переменную типа структура z, и потом ее вывел в файл. А у тебя в этой переменной данные то есть?

392
26 марта 2010 года
cronya
421 / / 03.01.2009
Код:
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<conio.h>
using namespace std;
struct train
{
    char station[30];
    int count,numer,time;
    train *next, *prev;
};
void output(train *last);
void mainmenu();
void headup();
int pluser(train *last);
void removemenu();
int main(int argc, char* argv[])
{
    FILE *in;
    in=fopen("dan.txt","r");
    if(!in)
    {
        cout<<"Error of Input Text File!"<<endl;
        system("pause");
        exit(1);
    }
    train *k,*q,*first,*last;
    int temp,t;
    char s[1];
    k=new train;
    fscanf(in,"%30s%i%i",k->station,&k->numer,&k->time);
    k->next=NULL;
    k->prev=NULL;
    last=k;
    q=k;
    while(!feof(in))
    {
        k=new train;
        fscanf(in,"%30s%i%i",k->station,&k->numer,&k->time);
        k->next=q;
        q->prev=k;
        q=k;
    }
    q->prev=NULL;
    first=q;
    cout<<"Wellcome To Line List!!!"<<endl;
    cout<<"Recods List:"<<endl;
    headup();
    output(last);
    system("pause");
    int fl=0;
    do
    {
        mainmenu();
        switch(getch())
        {
        case 49:
            system("cls");
            headup();
            output(last);
            system("pause");
            break;
        case 50:
            system("cls");
            train *pump;
            pump=new train;
            cout<<"Enter Train(30 strings maximum): ";
            cin>>pump->station;
            cout<<"Enter Train Numer: ";
            cin>>pump->numer;
            cout<<"Enter Time: ";
            cin>>pump->time;
            if(last==NULL&&first==NULL)
            {
                first=last=pump;
                pump->prev=NULL;
                pump->next=NULL;
            }
            else
            {
                last->next=pump;
                pump->prev=last;
                last=pump;
                pump->next=NULL;
            }
            cout<<"\n";
            printf("Record has been created");
            cout<<"\n\n";
            system("pause");
            break;
        case 51:
            removemenu();
            fl=1;
            train *l;
            l=k=first;
            switch(getch())
            {
            case 49:
                system("cls");
                cout<<"Which numer of Record you want remove?: ";
                cin>>t;
                fl=0;
                temp=pluser(last);
                strcpy(s,"y");
                do
                {
                    if(t>temp)
                    {
                        system("cls");
                        cout<<"There is no such record. Try again? ";
                        cout<<"(y/n): ";
                        cin>>s;
                        if(strcmp(s,"y")==0)
                        {
                            system("cls");
                            cout<<"Which numer of Record you want remove?: ";
                            cin>>t;
                        }
                        else if(strcmp(s,"n")==0)break;
                    }
                }
                while(t>temp);
                if(strcmp(s,"y")==0)
                {
                    if(t==k->count)
                    {
                        fl=1;
                        if(k->next==NULL)
                        {
                            delete k;
                            delete first;
                            delete last;
                            first=last=NULL;
                        }
                    }
                    while(k!=NULL)
                    {
                        fl=1;
                        if(t==k->count)
                        {
                            if(k==first)
                            {
                                q=k;
                                first=k->next;
                                first->prev=NULL;
                                l=k=first;
                                delete q;
                            }
                            else if(k==last)
                            {
                                q=k;
                                last=k->prev;
                                last->next=NULL;
                                k=NULL;
                                delete q;
                            }
                            else
                            {
                                q=k;
                                l->next=k->next;
                                k->next->prev=l;
                                delete q;
                                k=l->next;
                            }
                        }
                        else
                        {
                            l=k;
                            k=k->next;
                        }
                    }
                    if(fl==1)
                    {
                        cout<<"\n\n";
                        cout<<"Record remove!";
                        cout<<"\n\n";
                        system("pause");
                    }
                }
                        break;
            case 50:
                system("cls");
                k=first;
                while(k!=NULL)
                {
                    first=k->next;
                    delete k;
                    k=first;
                }
                first=last=NULL;
                cout<<"List is empty!\n"<<endl;
                system("pause");
                break;
            case 51:
                break;
            }
            break;
        case 27:
            exit(1);
            delete []k;
            break;
        }
    }
    while(1);
        return 0;
}
void output(train *last)
{
    train *k;
    k=last;
    int i=1;
    while(k!=NULL)
    {
        k->count=i;
        printf("||%3i||%30s||%10i||%10i||\n",k->count,k->station,k->numer,k->time);
        cout<<"---------------------------------------------------------------"<<endl;
        k=k->prev;
        i++;
    }
}
void mainmenu()
{
    system("cls");
    cout<<"   Menu:"<<endl;
    cout<<"1)Show Records"<<endl;
    cout<<"2)Add Record"<<endl;
    cout<<"3)Remove Record"<<endl;
    cout<<"Esc)Exit"<<endl;
}
void headup()
{
    cout<<"---------------------------------------------------------------"<<endl;
    cout<<"|| # ||             Train            ||  Number  ||   Time   ||"<<endl;
    cout<<"---------------------------------------------------------------"<<endl;
}
int pluser(train *last)
{
train *k;
k=last;
int i=0;
while(k!=NULL)
{
i++;
k=k->prev;
}
return i;
}
void removemenu()
{
    system("cls");
    cout<<"  Menu:"<<endl;
    cout<<"1)Remove by numer in List"<<endl;
    cout<<"2)Remove all"<<endl;
    cout<<"3)Back"<<endl;
}

Держи и радуйся! Это двусвязный линейный список. Ну тут доработать можно плюс оптимизацию сделать. Редактирование, сохранение и поиск думаю сам попробуешь сделать. :)
392
26 марта 2010 года
cronya
421 / / 03.01.2009
тестовой файл забыл :) + сам скомпилированный проект
55K
27 марта 2010 года
manuk
14 / / 19.03.2010
Спасибо большое))))!!!!!! Я очень очень благодарен)))
55K
27 марта 2010 года
manuk
14 / / 19.03.2010
я ща пытаюсь реализовать поиск)))
можешь пожалуйста комментировать прогу, я просто по такому стилю мне очень сложно программировать)))!!
392
27 марта 2010 года
cronya
421 / / 03.01.2009
Цитата: manuk
я ща пытаюсь реализовать поиск)))
можешь пожалуйста комментировать прогу, я просто по такому стилю мне очень сложно программировать)))!!


Используй (strcmp("string1","string2")==0) по нужному полю :)

392
27 марта 2010 года
cronya
421 / / 03.01.2009
Код:
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<conio.h>
using namespace std;
struct train
{
    char station[30];//имя поезда
    int count,numer,time;//номер списка, номер поезда, время
    train *next, *prev;//следующий элемент списка, предыдущий
};
void output(train *last);//вывод списка
void mainmenu();//главное меню печатает
void headup();//шапка таблицы
int pluser(train *last);//считает количество элементов в списке, потом при удалении понадобиться
void removemenu();//меню удаления
int main(int argc, char* argv[])
{
    FILE *in;
    in=fopen("dan.txt","r");//открываем файл
    if(!in)//проверяем его наличие
    {
        cout<<"Error of Input Text File!"<<endl;
        system("pause");
        exit(1);
    }
    train *k,*q,*first,*last;// указатель на список, доп указатель на список,указатель на первый элемент списка, указатель на последний элемент списка
    int temp,t;//бафферные переменные
    char s[1];//баф переменная
    k=new train;//выделяем память
    fscanf(in,"%30s%i%i",k->station,&k->numer,&k->time);//читаем из списка
    k->next=NULL;
    k->prev=NULL;
    last=k;
    q=k;
    while(!feof(in))//заполняем список пока не конец файла
    {
        k=new train;
        fscanf(in,"%30s%i%i",k->station,&k->numer,&k->time);
        k->next=q;
        q->prev=k;
        q=k;
    }
    q->prev=NULL;
    first=q;
    cout<<"Wellcome To Line List!!!"<<endl;
    cout<<"Recods List:"<<endl;
    headup();
    output(last);
    system("pause");
    int fl=0;
    do
    {
        mainmenu();
        switch(getch())//собственно так меню сделано
        {
        case 49:
            system("cls");
            headup();
            output(last);
            system("pause");
            break;
        case 50:
            system("cls");
            train *pump;
            pump=new train;
            cout<<"Enter Train(30 strings maximum): ";
            cin>>pump->station;
            cout<<"Enter Train Numer: ";
            cin>>pump->numer;
            cout<<"Enter Time: ";
            cin>>pump->time;
            if(last==NULL&&first==NULL)//если первый, добавляем
            {
                first=last=pump;
                pump->prev=NULL;
                pump->next=NULL;
            }
            else// если еще есть элементы в списке, добавляем
            {
                last->next=pump;
                pump->prev=last;
                last=pump;
                pump->next=NULL;
            }
            cout<<"\n";
            printf("Record has been created");
            cout<<"\n\n";
            system("pause");
            break;
        case 51:
            removemenu();
            fl=1;
            train *l;
            l=k=first;
            switch(getch())
            {
            case 49:
                system("cls");
                cout<<"Which numer of Record you want remove?: ";
                cin>>t;
                fl=0;
                temp=pluser(last);
                strcpy(s,"y");
                do//обрабатываем какой номер записи нажмут для удаления, чтобы все путем работало
                {
                    if(t>temp)
                    {
                        system("cls");
                        cout<<"There is no such record. Try again? ";
                        cout<<"(y/n): ";
                        cin>>s;
                        if(strcmp(s,"y")==0)
                        {
                            system("cls");
                            cout<<"Which numer of Record you want remove?: ";
                            cin>>t;
                        }
                        else if(strcmp(s,"n")==0)break;
                    }
                }
                while(t>temp);
                if(strcmp(s,"y")==0)
                {
                    if(t==k->count)
                    {
                        fl=1;
                        if(k->next==NULL)//если всего 1 элемент в списке
                        {
                            delete k;
                            delete first;
                            delete last;
                            first=last=NULL;
                        }
                    }
                    while(k!=NULL)//если в списке еще есть э-ты
                    {
                        fl=1;
                        if(t==k->count)
                        {
                            if(k==first)//если элемент первый
                            {
                                q=k;
                                first=k->next;
                                first->prev=NULL;
                                l=k=first;
                                delete q;
                            }
                            else if(k==last)//если э-т последний
                            {
                                q=k;
                                last=k->prev;
                                last->next=NULL;
                                k=NULL;
                                delete q;
                            }
                            else//если он в середине
                            {
                                q=k;
                                l->next=k->next;
                                k->next->prev=l;
                                delete q;
                                k=l->next;
                            }
                        }
                        else//если не тот э-т который удаляем, листаем дальше
                        {
                            l=k;
                            k=k->next;
                        }
                    }
                    if(fl==1)
                    {
                        cout<<"\n\n";
                        cout<<"Record remove!";
                        cout<<"\n\n";
                        system("pause");
                    }
                }
                        break;
            case 50:
                system("cls");
                k=first;
                while(k!=NULL)//удаление всего списка сразу
                {
                    first=k->next;
                    delete k;
                    k=first;
                }
                first=last=NULL;
                cout<<"List is empty!\n"<<endl;
                system("pause");
                break;
            case 51:
                break;
            }
            break;
        case 27:
            exit(1);//выход из програмы
            delete []k;
            break;
        }
    }
    while(1);
        return 0;
}
void output(train *last)
{
    train *k;
    k=last;
    int i=1;
    while(k!=NULL)
    {
        k->count=i;
        printf("||%3i||%30s||%10i||%10i||\n",k->count,k->station,k->numer,k->time);
        cout<<"---------------------------------------------------------------"<<endl;
        k=k->prev;
        i++;
    }
}
void mainmenu()
{
    system("cls");
    cout<<"   Menu:"<<endl;
    cout<<"1)Show Records"<<endl;
    cout<<"2)Add Record"<<endl;
    cout<<"3)Remove Record"<<endl;
    cout<<"Esc)Exit"<<endl;
}
void headup()
{
    cout<<"---------------------------------------------------------------"<<endl;
    cout<<"|| # ||             Train            ||  Number  ||   Time   ||"<<endl;
    cout<<"---------------------------------------------------------------"<<endl;
}
int pluser(train *last)
{
train *k;
k=last;
int i=0;
while(k!=NULL)
{
i++;
k=k->prev;
}
return i;
}
void removemenu()
{
    system("cls");
    cout<<"  Menu:"<<endl;
    cout<<"1)Remove by numer in List"<<endl;
    cout<<"2)Remove all"<<endl;
    cout<<"3)Back"<<endl;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог