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

Удаление элемента односвязного списка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Прокомментировать код. QuickSort http://www.cyberforum.ru/cpp-beginners/thread1235352.html
Напишите пожалуйста как можно подробнее комментарии к каждой строке, а то я точно чайник и мало что понимаю #include <iostream> #include <cstring> using namespace std; void quicksort(char *items, int len);
C++ Графический символ ASCII в русской локали (консоль) Здравствуйте, нужно вывести символ \xB2 (заштрихованный прямоугольник) так все работает, но если объявить setlocale(LC_ALL,"RUS") так как нужна кириллица, то вместо квадратика вопросительный знак, как быть ? http://www.cyberforum.ru/cpp-beginners/thread1235340.html
C++ Как можно явно вызвать оператор преобразования?
Доброго времени суток Как можно явно вызвать такой оператор преобразования? struct CL { template <class A, class B, class C> operator double() { return 6.6;
Классы - что это? C++
Что такое классы? Зачем они нужны? И как их использовать?
C++ Вызов стороннего приложения без полного пути http://www.cyberforum.ru/cpp-beginners/thread1235245.html
Всем доброго времени суток! Подсобите в следующем вопросе пожалуйста: Язык C++ среда разработки Visual Studio 2012, мне требуется запустить стороннее приложение (.exe) с параметрами, аналогия со строкой cmd : lspl-find.exe -i arg1 -p arg2 -o arg 3 arg4, перерыл кучу инфы по этому поводу, нашел множество функций выполняющих данную задачу (spawnl, execl, ShellExecute, CreateProcess, ...), однако,...
C++ Неопределенная ссылка при многофайловой реализации шаблона Здравствуйте уважаемые форумчане. И снова я что то делаю не так. Есть 3 файла main.cpp - сама программа, Larray.h - объявление класса, Larray.cpp - собственно сам класс. Larray.h #ifndef LARRAY_H_ #define LARRAY_H_ #include <iostream> подробнее

Показать сообщение отдельно
Чернокот
0 / 0 / 0
Регистрация: 23.07.2014
Сообщений: 5
28.07.2014, 17:30     Удаление элемента односвязного списка
Здравствуйте. Написал вот такой код. В программе происходит создание списка, вывод его на экран, а так же удаление первого элемента, меньшего заданного числа. Вот как раз с удалением возникла проблема: удаляется любой элемент списка, кроме первого. Когда хочу, чтоб удалился первый элемент, программа вылетает. Прошу помочь решить эту проблему.
P. S. Числа при создании списка добавляются в голову.
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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
//описание структуры
struct point
{
    int num;//информационное поле
    point*next;//адресное поле
};
point* make_point()
//создание одного элемента
{
 
    point*p=new(point);//выделить память
    cout<<"\nВведите число: ";
    cin>>p->num;
    p->next=0;//сформировать адресное поле
    return p;
}
void print_point(point*p)
//печать информационных полей одного элемента списка
{
    cout<<"\nЧисло: "<<p->num;
}
 
point* make_list(int n)
//формирование списка из n элементов
{
    point* beg=make_point();//сформировать первый элемент
    point*r;
    for(int i=1;i<n;i++)
    {
        r=make_point();//сформировать следующий элемент
        //добавление в начало списка
        r->next=beg;//сформировать адресное поле
        beg=r;//изменить адрес первого элемента списка
    }
    return beg;//вернуть адрес начала списка
}
 
int print_list(point*beg)
//печать списка, на который указывает указатель beg
{
    point*p=beg;//р присвоить адрес первого элемента списка
    int k=0;//счетчик количества напечатанных элементов
    while(p)//пока нет конца списка
    {
        print_point(p);//печать элемента, на который указывает элемент p
        p=p->next;//переход к следующему элементу
        k++;
    }
    return k;//количество элементов в списке
}
 
int find(point*beg)
{
    int isk;
    cout<<"\nвведите значение\n";
    cin>>isk;
    point*p=beg;
    int k=0;
    while(p)
    {
        if(p->num<isk){ break;}
        p=p->next;
        k++;
    }
    return k;
}
 
point*del_point(point*beg,int k)
//удаление элемента с номером к
{
    point*p=beg;//поставить вспомогательную переменную на начало списка
    int i=0;//счетчик элементов в списке
    if(k==0)
    {//удалить первый элемент
        beg=p->next;
        delete[]p;//удалить элемент из списка
        return beg;//вернуть адрес первого элемента списка
    }
        point*r;//вспомогательная переменная для удаления
    while(p)//пока нет конца списка
    {
        if(i==k-1)//дошли до элемента с номером k-1, чтобы поменять его поле next
        {//удалить элемент
            r=p->next;//поставить r на удаляемый элемент
            if(r)//если p не последний элемент
            {
                p->next=r->next;//исключить r из списка
                delete[]r;//удалить элемент из списка
            }
            else p->next=0;//если p -последний элемент, то в поле next присвоить NULL
        }
        p=p->next;//переход к следующему элементу списка
        i++;//увеличить счетчик элементов
    }
    return beg;//вернуть адрес первого элемента
}
 
void main()
{
    setlocale(LC_ALL, "rus");
    int n;
    cout<<"\nВведите размер листа: ";
    cin>>n;
    point*beg=make_list(n);//формирование списка
    if(!print_list(beg)) cout<<"\nЛист пуст";
    int k=find(beg);
    del_point(beg,k);
    cout<<"\nИзменённый список: ";
    print_list(beg);
    getch();//печать списка
}
Добавлено через 1 час 52 минуты
поднимем
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru