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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lostmen
0 / 0 / 0
Регистрация: 15.03.2011
Сообщений: 13
#1

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

08.04.2011, 14:21. Просмотров 371. Ответов 0
Метки нет (Все метки)

Люди помогите пожалуйста исправить код а то при вводе списка из 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
130
131
132
133
#include <iostream>
using namespace std;
 struct stack
  {
    int info;
    stack *rlink, *llink;
  };
 
int F(stack *k, int t)
{
    if(k->info == t)
        return 1;
}
/*Функция вывода слева напpаво*/
 
int lstack(stack *left)
{
  stack *k = left;
  if (k != NULL)
  {
    while (k != NULL)
    {
        cout<<k->info<<" ";                         
        k = k->rlink;
    }
  }
}
 
/*Функция вывода спpава налево*/
 
void rstack(stack *rigth)
{
    stack *k = rigth;
    if (k != NULL)
    {
        while (k != NULL)
        {
            cout<<k->info<<" ";                              
            k = k->llink;
        }
    }
}
 
void main()
{
  setlocale(LC_ALL, "Russian_Russia.1251");
  stack *top, *q, *k, *left, *rigth;
  int w,t;
  cout<<"Введите x:";                                  
  cin>>t;                                                     
  top = NULL;
 
  cout<<"Введите элемент списка:";                                
  cin>>w;                                                    
  k = new stack; 
  k->info = w; 
  k->rlink = NULL;
  k->llink = NULL;
  rigth = k;
  q = k; 
 
  cout<<"Введите следующий элемент списка:";                      
  cin>>w;                                                           
  while (!feof(stdin))
  {
    k = new stack;
    k->info = w;
    k->rlink = q;
 
    /*Связь нового узла с предыдущим*/
 
    q->llink = k; /*Связываем предыдущий узел с вновь созданным*/
    q = k;
    cout<<"Введите следующий элемент списка:";                           
    cin>>w;                                                               
  }
 
  /* Вывод стека */
  q->llink = NULL;
  left = q;
  cout<<"\nSleva napravo:\n";                                              
  lstack(left);
  cout<<"\nSpravo nalevo:\n";                                                  
  rstack(rigth);
  /* Удаление узлов стека*/
 
  stack *l;  /*Указатель на предыдущий узел*/
  l = k = left;
 
  while (k != NULL)
  {
    if (F(k,t)== 1)
    { 
      if (k == left)
      { /*Если самый левый*/
        q = k;
        left = k->rlink;
        left->llink = NULL;
        l = k = left;
        delete q;
      }
      else if (k == rigth)
      { /* Если самый правый*/
        q = k;
        rigth = k->llink;
        rigth->rlink = NULL;
        k = NULL;
        delete q;
      }
      else
      { /*если в середине*/
        q = k;
        l->rlink = k->rlink;
        k->rlink->llink = l;
        delete q;
        k = l->rlink;
      }
    }
    else
    {
      l = k;
      k = k->rlink;
    }
  }
  cout<<"\n_______________________\n";                      
  cout<<"\n~{ POSLE UDALENIYA "<<t<<" }~\n";                           
  cout<<"\nSleva napravo:\n";                                 
  lstack(left);
  cout<<"\nSprava nalevo;\n";
  rstack(rigth);
  cout<<"\n\007";                                             
  system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2011, 14:21     Двусвязный список
Посмотрите здесь:

Указатели. Двусвязный список - C++
struct Link { string value; Link *prev; Link *succ; Link (const string &amp;v) :value(v), prev(0),succ(0){} }; Link...

Двусвязный список контейнеры и итераторы - C++
#include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;list&gt; using namespace std; class List { private: int...

двусвязный список - конструктор копирования - C++
есть шаблон класса для двусвязного списка на базе адресных указателей: template &lt;class T&gt; class list { private: struct elem ...

Двусвязный список с поддержкой итераторов - C++
Привет, мальчики. Помогите сделать двусвязный список с поддержкой итераторов. Всем :kiss: Тема переименована с &quot;Односвязный...

Итератор, двусвязный кольцевой список - C++
Итератор должен ходить по кругу,то есть при указании на следующее значение в последнем элементе идет на первое значение. А меня ошибка,...

Шаблон класса двусвязный список - C++
Доброго времени суток! Препод дал задание реализовать шаблон класса двусвязный список. Сам класс написал, но не знаю как сделать из него...

Двусвязный список - функция удаления - C++
Подскажите,где ошибка. Функция удаляет книгу из списка по названию автора... void DeleteBook(List&amp; theList) // функция удаления...

Класс типа двусвязный список - C++
Создать класс типа - двусвязный список. Функции-члены добавляют элемент к списку, удаляют элемент из списка. Отображают элементы списка от...

Двусвязный список. Функция swap - C++
Дописать в класс list функцию: swap – поменять содержимое текущего списка с заданным. #pragma once template&lt;class T&gt; class list...

Преобразовать односвязный список в двусвязный - C++
Нужна помощь в написании следующей программы: Дана односвязная цепочка и указатель на ее первый элемент, нужно преобразовать данную цепочку...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru