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

Вывод списка в виде отдельных функций - C++

Восстановить пароль Регистрация
 
xexe73
1 / 1 / 0
Регистрация: 27.09.2012
Сообщений: 22
21.11.2012, 11:26     Вывод списка в виде отдельных функций #1
Реализация в коде удаления,поиска,и вставки элементов,программа удаляет тока 1 элемент списка. Помогите исправить пожалуйста.


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
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <clocale>
#include <conio.h>
 
struct spisok //создание
{
    int d;
    spisok *next;//следующий
    spisok *prev;//вернуться
};
spisok *first()//формирование первого элемента
{
    spisok *pv=new spisok;//создание переменной pv, присваивание ей все свойства структуры
    cout<<endl<<"Введите целое число"<<endl;
    cin>>pv->d;
    pv->next=0;// присваивает сл элементу 0
    return pv;
}
void add (spisok **pend)//добавление элементов
{
    spisok *pv=new spisok;
    cout<<endl<<"Введите целое число"<<endl;
    cin>>pv->d;
    pv->next=0;
        (*pend)->next=pv;
        *pend=pv;
}
 
 
void vivod(spisok*pv) // функция вывода списка
{
    cout << "Список:" << endl;
    while (pv) // пока в списке есть элементы
        {
            cout << pv ->d << endl; // вывод элементов
            pv = pv ->next; // переход к сл элементу
        }
}
spisok* search(spisok * const pbeg, int q) // функция поиска
{
    spisok*pv=pbeg; // приваивает элементу pv адрес первого элемента
    while (pv) // пока в списке есть элементы
    {
        if(pv->d == q) // условие проверки
            {
                return pv; // возврат значения найденного элемента
                break;
        }
        else
        {
            pv=pv->next; // переход к следующему элементу
        }
    }
}
 
 
bool deleting(spisok**pbeg, spisok**pend, int del) // функция удаления
{
    if(spisok*pkey= search(*pbeg,del)) // присваивает переменной pkey значение найденного с помощью функции search элемента
    {
        if(pkey==*pbeg) // если pkey = первому элементу
        {
            *pbeg = (*pbeg)->next; // первому элементу присваиваем значение следующего
            (*pbeg)->prev=0; // и обнуляем предыдущее
        }
        else if (pkey == *pend) // если pkey = последнему элементу
        {
            *pend=(*pend)->prev; // последнему элементу присваиваем значение 
            (*pend)->next=0; // и обнуляем предыдущее его.
        }
        else
        {
            (pkey->prev)->next = pkey->next; 
            (pkey->next)->prev = pkey->prev;
        }
        delete pkey; // удаляем переменную pkey
        return true; // возвращаем значение истина
    }
        return false; // возвращаем значение ложь, если элемент не найден в списке.
}
 
 
 
void ins (spisok* const pbeg, spisok**pend, int key, int pos)//функция вставки
    {
    if(spisok *pkey = search(pbeg,pos)) //есть ли в списке введённый элемент, после которого нужно добавить новый элемент 
    {
        spisok*pv=new spisok;
        pv->d = key; // создаёт новый элемент
        pv->next = pkey->next;
        pv->prev = pkey;
        pkey->next = pv; // перемещает элементы 
        if(pkey != *pend) // проверка не является ли введённый элемент, после которого нужно вставить последним.
            (pv->next)->prev = pv; // добавляет элемент между ними
        else
            *pend=pv; // если является, то вставляем на последнее место
    }
}
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    spisok*pbeg=first(); // добавляем первый элемент
    spisok*pend=pbeg; // последнему элементу присваем значение первого
    for(int i=0;i<3;i++) // цикл добавления элементов в список
        add(&pend); // вызов функции добавления элемента
    vivod(pbeg); // вызов функции вывода списка на экран
    cout << "Введите элемент для удаления" << endl;
    int del;
    cin >> del;
    if(!deleting(&pbeg,&pend,del)) // условие, проверяющее элемент на наличие в списке, для его удаления из списка.
        cout << "Элемент не найден!" << endl;
    vivod(pbeg); // вывод списка
    cout << "Введите элемент" << endl;
    int key;
    cin >> key;
    cout << "Введите число, после которого необходимо поместить элемент " << key << endl;
    int pos;
    cin >> pos;
    ins(pbeg,&pend,key,pos); // вызов функции вставки
 
    
    vivod(pbeg); 
    _getch(); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2012, 11:26     Вывод списка в виде отдельных функций
Посмотрите здесь:

Расчет сумм в формуле и расчет xi должны быть оформлены в виде отдельных функций. C++
C++ Оформить в виде отдельных функций введения, просмотр и определение количества чисел масива
C++ Оформить программу в виде функций
C++ Оформление программы в виде функций
Оформить в виде функций C++
Даны матрицы А(4,3) и В(3,5). Для каждой матрицы вычислить сумму элементов над главной диагональю. Ввод,вывод,сумму в виде отдельных процедур C++
C++ Оформить в виде функций программу
C++ Оформить программу в виде функций обработки массивов (ввод, заполнение, вывод, упорядочение и т.п.)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 10.11.2010
Сообщений: 132
21.11.2012, 14:57     Вывод списка в виде отдельных функций #2
C++
1
2
if(spisok*pkey= search(*pbeg,del)) // присваивает переменной pkey значение найденного с помощью функции search элемента
    {
тут нужен цикл, в котором от самого начала и до конца делается пробег по списку, а у тебя получается 1 раз вызывается функция search, которая вернула тебе первый найденный элемент или 0, и ты его удаляешь.
что-то вроде
C++
1
2
3
while(pkey = search(*pbeg,del)) {
код удаления и т.д.
}
то есть, пока выполняется функция search - удалять элементы, а если функция вернет 0 - элементов не найдено - завершить удаление.
Yandex
Объявления
21.11.2012, 14:57     Вывод списка в виде отдельных функций
Ответ Создать тему
Опции темы

Текущее время: 06:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru