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

Создать односвязный список, затем вывести весь список в ListBox

23.10.2011, 14:46. Показов 5596. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class List 
 { 
   public: 
    string Element; 
    List * pNext;
    
 };  
List * pHead = 0;          
List * pNew;      
  
void zapolnenie(List *pNew)  
{ 
  cout << "Add element: \n"; 
  cin >>  pNew->Element;
}  
 
void displayData(List * pNew)  
{  
  cout <<pNew->Element<<' '; 
}    
 
void create(int size)
{
 for (int i = 0; i<size; i++) 
 
{ 
 
 pNew = new List; 
 pNew->pNext = pHead; 
 pHead = pNew; 
 zapolnenie(pNew);  
 }    
}
 
void main()
{  create(3); 
 
while(pNew)  
{ 
    displayData(pNew);  
    pNew = pNew->pNext;     
}  
 
 getch();
}
Надо написать программу которая создаёт односвязный список, затем выводит весь список в listbox также нужны 2 кнопки: удалить/добавить элемент(В созданном списке элементы так же должны добавятся/удалятся). Вот пример моего консольного кода. Как запихнуть его в Форму не знаю =*(. 3 день пыхчу. Помогите чем можете. Работаю в Visual C++ 2010
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2011, 14:46
Ответы с готовыми решениями:

Вывести список файлов в ListBox
Здравствуйте, как вывести список файлов в папке в listbox?

Ввести список студентов и их группу Вывести список студентов заданной группы
Ребят, помогите пожалуйста, ибо в windowsform вообще не шарю и не знаю как его записать, может ли...

Создать класс «Квартира», в котором список комнат реализовать как односвязный список
Добрый день,написал фот такой клас по заданию:Создать класс «Квартира», в котором список комнат...

Создать двусвязный список групп факультета, где каждая группа представляет собой односвязный список студентов
Задание: создайте двусвязный список групп факультета. Каждая группа представляет собой односвязный...

6
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
23.10.2011, 22:40 2
black_puss, вот накидал класс-одноправленный список.
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <iostream>
using namespace std;
 
// одноправленный список
template<class T>
class xlist {
   struct node {
        T d;
         node* next;
         node(void): next(NULL){}
   };
private:
   node*  lst;   // главный узелковый ptr
   node*  right;  // итератор для прохода
public:
   xlist(void) : lst(NULL), right(NULL) {}
   ~xlist() {
       this->clear();
   }
public:
   // добавление элементов по принципу FIFO(первый зашёл, первый вышел)
   void add(T d) {
        node* ptr = new node();
        ptr->d  = d;
        if(! lst)
             lst->next = lst = ptr;
        else {
             ptr->next = lst->next;
             lst = lst->next = ptr;
        }
   }
 
  // вставка элемента на указанную позицию
  void insert(size_t pos, T d) {
        node* tmp = lst, 
                *iter = lst->next;
        for(size_t i = 0u; i < pos; i++) {
              tmp  = iter;
              iter = iter->next;
        }
        if(lst == iter) 
              this->add(d);
        else {
              node* ptr = new node();
              ptr->d    = d;
              ptr->next = tmp->next;
              tmp->next = ptr;
        }
   }
 
   // выталкивание первого элемента "навсегда"
   void pop_first(void) {
         if(lst->next == lst) {
               delete lst;
               lst = NULL;
         } else {
               node* tmp = lst->next;
               lst->next = tmp->next;
               delete tmp;
               tmp = NULL;
         }
    }
 
   // удаление элемента по указанной позиции
   void remove(size_t pos) {
         node* tmp = lst, 
                 *iter = lst->next;
         if(lst == lst->next) {
                delete lst;
                lst = right = NULL;
                return;
         }
         for(size_t i = 0u; i < pos; i++) {
               tmp  = iter;
               iter = iter->next;
         }
         if(lst == iter) {
               tmp->next = iter->next;
               lst = lst->next = tmp;
               delete iter;
               iter = NULL;
         } else {
               tmp->next = iter->next;
               delete iter;
               iter = NULL;
         }
   }
 
   // возвращает самый первый элемент в списке
   T& first(void) {  return lst->next->d; }
 
    // метод возвращает полный размер списка
    size_t  get_size(void) const {
           size_t cnt = 0u;
           const node* iter, *end;
           if(! lst)
                 return 0u;
           iter = lst->next;
           end = lst->next;
           do {
                  cnt++;
                  iter = iter->next;
           } while(iter != end);
            return cnt;
     }
 
    // сброс итерационного указателя на начало
    void reset(void) { right = lst->next; }
 
   // переместить итератор на элемент вперёд
   bool move(void) {
         if(right == NULL) {
                 right = lst->next;
                 return true;
          } else {
                if(right == lst) {
                     right = NULL;
                     return false;
                }
                right = right->next;
          }
          return true;
    }
    // получить текущий указатель-итератора на элемент
    T& current(void) { 
            if(right == NULL)
                 return lst->next->d;
            return right->d; 
     }
     // удаление всего списка из памяти навсегда
     void clear(void) {
            while(! this->empty())
                   this->pop_first();
             right = NULL;
     }
     // метод для проверки списка на "существование"
     bool empty(void) const { return (! lst); }
};
 
 
 
int  main(void) {
  xlist<string> lst;
 
  lst.add("Terminator");
  lst.add("Robocop");
  lst.add("Androed");
 
  // вставить на вторую позицию
  lst.insert(1u, "Universal soldier");
  // на третью
  lst.insert(2u, "Cyborg");
 
  lst.add("special");
 
  // вывести список в консоль для примера
  while(lst.move())
    cout << lst.current().c_str() << endl;
  lst.reset(); // установить внутрений итератор-списка в начало, ведь он был пройден
 
  // показать размер списка
  cout << "\nsize list: " << lst.get_size() << endl;
 
  lst.remove(2u); // удалить третий элемент
  lst.remove(0u); // удалить первый элемент
  lst.remove(lst.get_size()-1u); // удалить последний элемент
 
  // вывести список с выталкиванием навсегда по-элементно, после этого список будет удалён весь
  for(; ! lst.empty(); lst.pop_first()) 
      cout << '\t' << lst.first().c_str() << endl;
 
  // lst.clear();  // не стоит вызывать её, раз список пуст.
 
  // показать что список уничтожен
  if(lst.empty())
       cout << "xlist = NULL;" << endl;
 
   cin.get();
   return 0;
}
1
0 / 0 / 0
Регистрация: 23.08.2009
Сообщений: 7
23.10.2011, 23:16  [ТС] 3
Спасибо огромное!
А не подскажете как это привязать к форме? Случайно не через подключение файла?(т.е. закинуть этот код в отдельный файл spisok.h и объявить в форме #include "spisok.h")?
0
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
23.10.2011, 23:36 4
Цитата Сообщение от black_puss Посмотреть сообщение
(т.е. закинуть этот код в отдельный файл spisok.h и объявить в форме #include "spisok.h")?
black_puss, для удобства можешь так и сделать. К форме Visual C++ MFC то вот так можно сделать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "spisok.h"  // например подключили
// список 
xlist<CString>  tlist;
 
// обработчик кнопки - добавление нового элемента в список и в контрол-список
void CMFCDlg::OnButtonAdd() 
{
    CString str;
    GetDlgItemText(IDC_EDIT1, str); // из текстового поля
    tlist.add(str);
    SendDlgItemMessage(IDC_LISTBOX, LB_ADDSTRING, 0, (LPARAM) str.LockBuffer());
}
 
// обработчик кнопки - удаление из списка, и списка-контрола
void CMFCDlg::OnButtonDelete() 
{
    int sel = (int) SendDlgItemMessage(IDC_LISTBOX, LB_GETCURSEL);
    if(sel != -1) {
        tlist.remove((size_t)sel);
         SendDlgItemMessage(IDC_LISTBOX, LB_DELETESTRING, (WPARAM)sel);
    }
}
IDC_LISTBOX - это идентификатор ListBox.
1
0 / 0 / 0
Регистрация: 23.08.2009
Сообщений: 7
25.10.2011, 09:28  [ТС] 5
Ну теперь совсем непонятно стало.

Вот кусок из моего кода в форме.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma endregion
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
             }
void CMFCDlg::OnButtonAdd() 
{
    string str;
    GetDlgItemText(IDC_EDIT1, str); // из текстового поля
    tlist.add(str);
    SendDlgItemMessage(IDC_LISTBOX, LB_ADDSTRING, 0, (LPARAM) str.LockBuffer());
}
 
 
             void CMFCDlg::OnButtonDelete() 
{
    int sel = (int) SendDlgItemMessage(IDC_LISTBOX, LB_GETCURSEL);
    if(sel != -1) {
        tlist.remove((size_t)sel);
         SendDlgItemMessage(IDC_LISTBOX, LB_DELETESTRING, (WPARAM)sel);
    }
 
    };
}
Вот всё что объявлено
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
#include "spisok.h"
#include <windows.h> 
#include <string>
#include <WinUser.h>
namespace My4lababeta {
    using namespace std;
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    xlist<string>  tlist;
Вот ошибки =(

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1>------ Build started: Project: beta, Configuration: Debug Win32 ------
1>  4 laba beta.cpp
1>f:\documents\visual studio 2010\projects\beta\beta\Form1.h(121): error C2653: 'CMFCDlg' : is not a class or namespace name
1>f:\documents\visual studio 2010\projects\beta\beta\Form1.h(130): error C2653: 'CMFCDlg' : is not a class or namespace name
1>beta.cpp(6): error C2143: syntax error : missing ';' before 'using'
1>f:\documents\visual studio 2010\projects\beta\beta\Form1.h(124): error C2065: 'IDC_EDIT1' : undeclared identifier
1>f:\documents\visual studio 2010\projects\beta\beta\Form1.h(126): error C2065: 'IDC_LISTBOX' : undeclared identifier
1>f:\documents\visual studio 2010\projects\beta\beta\Form1.h(126): error C2039: 'LockBuffer' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Ax=std::allocator<char>
1>          ]
1>f:\documents\visual studio 2010\projects\beta\beta\Form1.h(132): error C2065: 'IDC_LISTBOX' : undeclared identifier
1>f:\documents\visual studio 2010\projects\beta\beta\Form1.h(135): error C2065: 'IDC_LISTBOX' : undeclared identifier
1>beta.cpp(19): fatal error C1075: end of file found before the left brace '{' at 'f:\documents\visual studio 2010\projects\beta\beta\Form1.h(7)' was matched
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Добавлено через 13 часов 36 минут
Цитата Сообщение от black_puss Посмотреть сообщение
Ну теперь совсем непонятно стало.
По все видимости VS 2010 Express не понимает CMFCDlg =(
точно так же как и не знает что такое CString.
Спасибо xAtom сильно помог со списком. Дальше как-нибудь разберусь)))))
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.10.2011, 14:13 6
black_puss, Дык у вас CLI а не MFC.
1
0 / 0 / 0
Регистрация: 23.08.2009
Сообщений: 7
25.10.2011, 18:52  [ТС] 7
Цитата Сообщение от ForEveR Посмотреть сообщение
black_puss, Дык у вас CLI а не MFC.
ForEveR,и как мне перейти к MFC, насколько я знаю это библиотека. И мне казалось что при создании файла "windows form application" туда уже все закинуто.

Добавлено через 35 минут
Вопрос отменяется. Разобравшись стало понятно что программу придётся писать с нуля. Полностью на MFC Спасибо за подсказку!
0
25.10.2011, 18:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2011, 18:52
Помогаю со студенческими работами здесь

Создать односвязный список из 5 элементов и вывести элементы списка на экран
Создать односвязный список из 5 элементов и вывести элементы списка на экран.

Упорядочить список студентов по среднему баллу и вывести весь список
форумчане,выдает ошибку :( столько маюсь с задачей уже #include &lt;vcl.h&gt; #include &lt;stdio.h&gt;...

Упорядочить список студентов по среднему баллу и вывести весь список
1. Упорядочить список студентов по среднему баллу и вывести весь список прошу помочь...

Вывести весь список и список с исключёнными нечётными элементами
Написать на приложении Visual Studio F# программу, выводящую список, а после - список, с...


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

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

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