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

Стеки и удаление конкретного элемента из стека - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Указатели на функции + typedef http://www.cyberforum.ru/cpp-beginners/thread877339.html
Здравствуйте , я вот встретил такую конструкцию typedef int(*compare_func_t)(const void*val1, const void*val2); Не понял что она означает , погуглив , я нашел что это указатель на функцию . Насколько я понял это означает что с помощью typedef мы создаем новый тип указатель на функцию. Эта функция возвращает значения типа инт , получает два параметра типа воид. Ну зачем это делать. И как это...
C++ С++. Массивы. Указатели. Определить кол-во и сумму отрицательных элементов Ребят, срочно помогите пожалуйста! Завтра зачёт по с++, задачи будут примерное такие: 1) Написать прогу, которая заполняет случайным образом массив А (n<30) целочисленными значениями. Определить кол-во и сумму отрицательных элементов . Массив вывести в файл. (Использовать указатели для работы с массивом) Народ, очень прошу, выручайте! http://www.cyberforum.ru/cpp-beginners/thread877329.html
C++ Запрет на ввод букв
Помогите пожалуйста сделать запрет на ввод букв: #include "stdafx.h" #include <cstdlib> #include <iostream> #include <math.h> #include <conio.h> using namespace std;
курсач (дискретная математика, пузырьковая сортировка) C++
Здравствуйте! нужна курсовая работа на тему "Пузырьковая сортировка". Вместе с графикой. Помогите пожалуйста.
C++ Не могу исправить ошибки. Заранее спасибо http://www.cyberforum.ru/cpp-beginners/thread877304.html
Задание: Программа реализует двусвязный список. Функции: 1) Добавление элемента на заданую пользователем позицию; 2) Удаление элемента по ключу; 3) Вывод двусвязного списка на экран; 4) Поиск элемента по ключу. #include <iostream.h> #include <stdlib.h> #include <string.h> #include <windows.h> //#include "stdafx.h" #include <conio.h> using namespace std; class Comp
C++ Ввод имени в программу с клавиатуры, содержащее 2 или более слова Помогите, пожалуйста, сделать возможным ввод имени, состоящего из нескольких слов. Например, пункт назначения "Москва" читается без проблема, а "Нижний Новгород" нет - второе слово "Нижний" распознаётся уже как номер рейса. Наверное, это нужно делать через getline, не могу понять как На фотографии-изначальное задание #include <iostream> #include <cctype> #include <cstring> #include... подробнее

Показать сообщение отдельно
Wolferine
0 / 0 / 0
Регистрация: 24.05.2013
Сообщений: 10
24.05.2013, 19:17     Стеки и удаление конкретного элемента из стека
Здравствуйте, уважаемые программисты и начинающие как я. Помогите, пожалуйста с одной функцией. В общем задача такова:
Имеется два списка (в моем случае это список таксистов на маршруте и на базе), структура каждого таксиста состоит из его номера и его фамилии. Сначала пользователь создает список таксистов на маршруте и на базе. Программа может выводить эти списки по желанию все того же пользователя. Но еще возможны 2 случая:
1) Из базы может выехать таксист. Логично предположить, что его нужно удалить из списка "таксисты на базе" и добавить в список "таксисты на маршруте".
Ну и обратное:
2) В базу может приехать таксист. Его нужно удалить из списка "таксисты на маршруте" и добавить в список "таксисты на базе".

Вся сложность появилась при написании функции удаления из списка (программу пишу поэтапно и добавление в список еще не писал). В функцию передаю номер таксиста, ищу его в списке и пытаюсь удалить. Прилагаю код:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
//прога создает стэк для таксистов на базе, для таксистов на маршруте
//выдает на экран эти стеки
//осталось выполнить стирание - добавление таксистов в стек
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <locale.h>
#include <conio.h>
using namespace std;
struct spis
{
    int num;
    char fio[10];
    spis *next;
};
int r,// r - количество таксистов на маршруте (road)
    b;// b - количество таксистов на базе (base)
spis *create_stack(int n); //функция создания списка таксистов
spis *delete_taxi(spis *head, int num_to_delete); //удаление таксиста из списка (работает некорректно)
void print_spisok (spis *head);//вывод списка
 
int main()
{
    setlocale(LC_ALL, "rus");
    spis *taxi_on_road, *taxi_on_base;//два списка
    while(true)
    {
        system("cls");
        cout<<" 1 - Создать базу таксистов, находящихся на маршруте\n";
        cout<<" 2 - Создать базу таксистов, находящихся на базе\n\n";
        cout<<" 3 - Вывести базу таксистов, находящихся на маршруте\n";
        cout<<" 4 - Вывести базу таксистов, находящихся на базе\n\n";
        cout<<" 5 - Из базы выехал таксист\n";
        cout<<" 6 - На базу приехал таксист\n\n";
        cout<<" 0 - Выход из программы\n";
        int action;
        scanf("%d", &action);
        switch(action)
        {
            case 1:
                system("cls");
                cout<<"Заполнение списка таксистов, находящихся на маршруте.\n";
                cout<<"Введите количество таксистов в этой базе: ";
                scanf("%d", &r);
                taxi_on_road=create_stack(r);
                cout<<"База создана!";
                getch();
                break;
            case 2:
                system("cls");
                cout<<"Заполнение списка таксистов, находящихся на базе.\n";
                cout<<"Введите количество таксистов в этой базе: ";
                scanf("%d", &b);
                taxi_on_base=create_stack(b);
                cout<<"База создана!";
                getch();
                break;
            case 3:
                system("cls");
                cout<<"Вывод базы таксистов, находящихся на маршруте.\n";
                print_spisok(taxi_on_road);
                getch();
                break;
            case 4:
                system("cls");
                cout<<"Вывод базы таксистов, находящихся на базе.\n";
                print_spisok(taxi_on_base);
                getch();
                break;
            case 5:
                system("cls");
                int num_to_road;
                cout<<"Введите номер таксиста, который выехал из базы: ";
                cin>>num_to_road;
                taxi_on_base=delete_taxi(taxi_on_base,num_to_road);
                //plus_taxi(taxi_on_road,num_to_road);
                getch();
                break;
            case 6:
                system("cls");
                cout<<"СКОРО.";
                getch();
                break;
            case 0:
                system("cls");
                getch();
                return 0;
                break;
        }
    }
}
spis *create_stack(int n){
    spis *p,*head;
    int i=0;
    head=NULL;
    do
    {
        p=new spis;
        p->next=head;
        head=p;
        cout<<"\nТаксист с номером: ";
        scanf("%d", &head->num);
        cout<<"\nЕго ФИО: ";
        scanf("%s", head->fio);
        i++;
    } while (i<n);
    return head;
}
spis *delete_taxi(spis *head, int num_to_delete){
    spis *p;
    p=head;
    for(int i=0; i<b; i++)
    {
        if(p->num==num_to_delete)
        {
            p->next=p->next->next;
            break;
        }
        p=p->next;
    }
    head=p;
    b--;
    return head;
}
void print_spisok (spis *head)
{
    spis *p;
    p=head;
    while (p!=NULL)
    {
        printf("Номер: %4d, ФИО: %10s\n",p->num, p->fio);
        p=p->next;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru