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

Двусвязанный список - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ функция http://www.cyberforum.ru/cpp-beginners/thread296857.html
даны действительные числа а0, а1,...., аn получить для чисел х=1,2,3,4 значение р(х+1) - р(х), где р(у) = a4(pow(y,6))+a3(pow(y,5))+...+a0
C++ календарь произвольного месяца помогите пожалуйста нужно написать программу,которая выводит календарь для заданного месяца то есть распечатывает в виде таблицы числа месяца с указанием названий дня недели. http://www.cyberforum.ru/cpp-beginners/thread296856.html
C++ Перевод дробных чисел из десятичной в двоичную систему счисления
для натуральных чисел все понятно, и предельно ясно. А как сделать для дробных чисел? Ведь перевод дроби надо умножать, а здесь делить с остатком, кто поможет? #include<iostream.h> #include<math.h> #include<conio.h> #include<stdlib.h> #include<stdio.h> #include<string.h> void main ()
C++ Process
У меня такой вопрос так system("start program.exe"); cout << "aaaaaa"; запускаю программу потом вывожу кокой то текст, как сделать так чтобы программа подаждала пока program.exe закончила свою работу и только потом напечатала текст?
C++ Чтение массива структур из файла http://www.cyberforum.ru/cpp-beginners/thread296797.html
есть структура typedef struct { unsigned short codeContribution; unsigned short contributorCode; float amountContribution; char dateContribution; } SInfo;
C++ Вычислить значение функции составить программу линейной структуры. На печать вывести значения вводимых данных. y=(sin x+cos z)/(cos x-sin z)*tg x*z подробнее

Показать сообщение отдельно
faith0097
0 / 0 / 0
Регистрация: 30.03.2011
Сообщений: 17
16.05.2011, 15:49     Двусвязанный список
Вобщем нужно реализовать основные функции для работы с двусвязанным списком (вставка элемента,удаление,печать,сортировка).
вот что уже набросал:
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
#include <iostream>
#include <conio.h>
using namespace std;
struct Node
{
    int d;
    Node *next;
    Node *prev;
};
Node * first(int d);
void add(Node **pend, int d);
Node * find(Node * const pbeg, int i);
bool remove(Node **pbeg, Node **pend, int key);
Node *insert(Node *const pbeg, Node **pend, int key, int d);
void PrintList(Node *pbeg);
void main()
{}
Node *first(int d)// Формирование первого элемента
{
    Node *pv = new Node;
    pv->d = d; pv->next = 0; pv->prev = 0;
    return pv;
}
 
void add(Node **pend, int d)// Добавление в конец списка
{
    Node *pv = new Node;
    pv->d = d; pv->next = 0; pv->prev = *pend;
    (*pend)->next = pv;
    *pend = pv;
}
Node *find(Node *const pbeg, int d)// Поиск элемента по ключу
{
    Node *pv = pbeg;
    while (pv)
    {
        if(pv->d == d)break;
        pv = pv->next;
    }
    return pv;
}
bool remove(Node **pbeg, Node **pend, int key)// Удаление элемента
{
    if(Node *pkey = find(*pbeg, key))
    { 
        if (pkey == *pbeg)// проверяется,находится ли удаляемый элемент в начале списка
        { 
            *pbeg = (*pbeg)->next;// если да,то надо скорректировать указатель pbeg на начало списка так, чтобы он указывал на следующий элемент в списке, адрес которого находится в поле next первого элемента
            (*pbeg)->prev =0;// обнуляется указатель на предыдущий элемент
        }
        else if (pkey == *pend)// если удаляемый элемент находится в конце списка, требуется сместить указатель pend конца списка на предыдущий элемент, адрес которого можно получить из поля prev последнего элемента
             { 
                *pend = (*pend)->prev;
                (*pend)->next=0;// обнуляется указатель на следующий элемент
             }
             else // Если удаление происходит из середины списка, то нужно лишь обеспечить двустороннюю связь предыдущего и последующего элементов
             {
                (pkey->prev)->next = pkey->next;
                (pkey->next)->prev = pkey->prev;
             }
        delete pkey;
        return true;
    }
    return false;
}
 
Node *insert (Node *const pbeg, Node **pend, int key, int d)// Вставка элемента
{
    if(Node *pkey = find(pbeg, key))
    {
        Node *pv = new Node;
        pv->d = d;
        pv->next = pkey->next;// установление связи нового узла с последующим
        pv->prev = pkey;// установление связи нового узла с предыдущим
        pkey->next = pv;// установление связи предыдущего узла с новым
        if(pkey != *pend)(pv->next)->prev = pv;// установление связи последующего узла с новым
        // Обновление указателя на конец списка,
        // если узел вставляется в конец
        else *pend = pv;
        return pv;
    }
    return 0;
}
void PrintList(Node *pbeg)// Печать списка
{
    // currPtr пробегает по списку, начиная с головы
    Node *pv = pbeg;
    while(pv != NULL)// пока не конец списка, печатать значение данных текущего  узла 
    {
        cout << pv->d << endl;
        pv = pv->next; // перейти к следующему узлу 
    }
}
Добавлено через 2 минуты
Осталось с помощью этих функции оформить как функцию вот такую вещь: Даны натуральные числа k, m, n символы s1, ... , sk, t1, ... , tm, u1, ... , un. Получить по одному разу те символы, которые входят одновременно во все три последовательности.

Добавлено через 16 минут
немного с типом правда налажал. в структуре,да и везде в функциях char должен быть
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru