2 / 2 / 0
Регистрация: 27.09.2012
Сообщений: 22
1

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

21.11.2012, 11:26. Показов 6540. Ответов 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(); 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2012, 11:26
Ответы с готовыми решениями:

Оформить в виде отдельных функций введения, просмотр и определение количества чисел масива
Код на c++ Напишите програму, проверяя коректность ввода размера масива. Проверте роботу програмы...

Расчет сумм в формуле и расчет xi должны быть оформлены в виде отдельных функций.
День добрый товарищи специалисты, помогите пожалуйста с примером...

Вывод данных в двоичном виде без использования интегрированных функций
Давно где - то видел сам алгоритм... Там всё через битовые сдвиги... Но что - то гугл ничего не...

Даны матрицы А(4,3) и В(3,5). Для каждой матрицы вычислить сумму элементов над главной диагональю. Ввод,вывод,сумму в виде отдельных процедур
Завтра дедлайн, а у меня 2 лабы и начало первого. Прошу помощи.

1
55 / 49 / 11
Регистрация: 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 - элементов не найдено - завершить удаление.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2012, 14:57
Помогаю со студенческими работами здесь

Оформить программу в виде функций обработки массивов (ввод, заполнение, вывод, упорядочение и т.п.)
помогите, пожалуйста, с программой, не могу никак разобраться с функциями, сколько уже отмучалась с...

Найти объём куба функцией; реализовать ввод и вывод элементов массива в виде функций
1) Написать функцию для вычисления объема куба. Вычислить объем куба для заданных пользователем...

Распечатать многочлен, заданный в виде односвязного списка, в обычном виде
Люди помогите пожалуйста. Вообще не знаю как подступиться к задаче. Заранее спасибо! Многочлен...

Вычисление текущих значений Y(x) и S(x) реализовать в виде отдельных функций
Вычисление текущих значений Y(x) и S(x) (где x принадлежит диапазону ) реализовать в виде отдельных...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru