Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/23: Рейтинг темы: голосов - 23, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 23.04.2009
Сообщений: 24

Однонаправленный линейный список

29.04.2009, 21:51. Показов 4343. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ПОмогите пожалуйста. Чтото нерпавильно с функцией добавления записи. Добовляет тока одну запись и её постоянно переписывает....
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
struct NOTE
        {
        char Family[25];
        char Name[10];
        char Place[15];
        char Date[11];
        NOTE* next;
        };
class SPI
        {
        private:
                NOTE DATA;
                NOTE* start;
                NOTE* current;
 
        public:
                SPI(); //Конструктор
                void  Add(NOTE mydata); //Добавление Записи
                //NOTE* GetCurrent(){return current;}
                //NOTE* GetStart(){return start;}
                char* GetFamily(){return DATA.Family;}
                char* GetName(){return DATA.Name;}
                char* GetPlace(){return DATA.Place;}
                char* GetDate(){return DATA.Date;}
                void  StringGridRefresh();
 
        };
//Конструктор
SPI::SPI()
        {
        NOTE* ADD=new NOTE;
        for(int i=0;i<25;i++) ADD->Family[i]=0;
        for(int i=0;i<10;i++) ADD->Name[i]=0;
        for(int i=0;i<15;i++) ADD->Place[i]=0;
        for(int i=0;i<11;i++) ADD->Date[i]=0;
        start=0;
        current=start;
        DATA.next=0;
        }
//Добавление записи
void  SPI::Add(NOTE mydata)
{
          NOTE* ADD=new NOTE;
          NOTE* AD1=new NOTE;
          if(start==0)
               {
               start=ADD;
               strcpy(ADD->Family,mydata.Family);
               strcpy(ADD->Name,mydata.Name);
               strcpy(ADD->Date,mydata.Date);
               strcpy(ADD->Place,mydata.Place);
               ADD->next=0;
               }
               else
                {
                        if(start!=0)
                        {
                                NOTE* p=start;
                                while (p->next!=0)
                                {
                                p=p->next;
                                }
                                p->next=AD1;
                                strcpy(ADD->Family,mydata.Family);
                                strcpy(ADD->Name,mydata.Name);
                                strcpy(ADD->Date,mydata.Date);
                                strcpy(ADD->Place,mydata.Place);
                                AD1->next=0;
                                }
                        }
                }
 
 
}
//----ФУНКЦИЯ Обновления содержимого StringGrid----//
void SPI::StringGridRefresh()
{
        current=start;
        int i=1, j=0;
        while(current!=0)
                {
                j=0;
                Form1->StringGrid1->Cells[j]  [i]=IntToStr(i);
                Form1->StringGrid1->Cells[j+1][i]=current->Family;
                Form1->StringGrid1->Cells[j+2][i]=current->Name;
                Form1->StringGrid1->Cells[j+3][i]=current->Place;
                Form1->StringGrid1->Cells[j+4][i]=current->Date;
                i++;
                current=current->next;
 
                }
}
 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int u=1;
        if(Form1->Edit1->Text==" ") u=0;
        if(Form1->Edit2->Text==" ") u=0;
        if(Form1->Edit3->Text==" ") u=0;
        if(Form1->Edit4->Text==" ") u=0;
        if(u==0)
                {
                ShowMessage("Заполните все поля!");
                return;
                }
        SPI *p=new SPI;
        NOTE list;
        strcpy(list.Family,Form1->Edit1->Text.c_str());
        strcpy(list.Name,Form1->Edit2->Text.c_str());
        strcpy(list.Date,Form1->Edit4->Text.c_str());
        strcpy(list.Place,Form1->Edit3->Text.c_str());
        char str[10];
        p->Add(list);
        p->StringGridRefresh();
        Form1->Caption=IntToStr(sizeof(list));;
        delete [] p;
 
}
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2009, 21:51
Ответы с готовыми решениями:

Сформировать новый линейный список однонаправленный список, содержащий только нечетные элементы
Даны 2 линейных однонаправленных списка с элементами целого типа. Количество элементов и их значения - случайные числа. Сформировать новый...

Линейный однонаправленный список
Задание Написать программу для реализации линейного однонаправленного списка в консольном приложении в среде Lazarus. Требования...

Линейный однонаправленный список
Добрый вечер! Задача: L – линейный однонаправленный список Проверить, упорядочены ли элементы списка по алфавиту. Подскажите...

11
 Аватар для NickA
35 / 34 / 17
Регистрация: 28.04.2009
Сообщений: 67
29.04.2009, 22:18
Может так будет работать...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Добавление записи
void  SPI::Add(NOTE mydata)
{
  NOTE* ADD=new NOTE;
  strcpy(ADD->Family,mydata.Family);
  strcpy(ADD->Name,mydata.Name);
  strcpy(ADD->Date,mydata.Date);
  strcpy(ADD->Place,mydata.Place);
  ADD->next=NULL;
  if(start==NULL){
    start=ADD;
  } 
  else {
    NOTE* p=start;
    while (p->next!=NULL){
      p=p->next;
    };
    p->next=ADD;
  };
};
0
2 / 2 / 1
Регистрация: 23.04.2009
Сообщений: 24
29.04.2009, 22:22  [ТС]
Неа, все ещё жует=(
0
 Аватар для NickA
35 / 34 / 17
Регистрация: 28.04.2009
Сообщений: 67
29.04.2009, 22:43
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int u=1;
        if(Form1->Edit1->Text==" ") u=0;
        if(Form1->Edit2->Text==" ") u=0;
        if(Form1->Edit3->Text==" ") u=0;
        if(Form1->Edit4->Text==" ") u=0;
        if(u==0)
                {
                ShowMessage("Заполните все поля!");
                return;
                }
        SPI *p=new SPI;
        NOTE list;
        strcpy(list.Family,Form1->Edit1->Text.c_str());
        strcpy(list.Name,Form1->Edit2->Text.c_str());
        strcpy(list.Date,Form1->Edit4->Text.c_str());
        strcpy(list.Place,Form1->Edit3->Text.c_str());
        char str[10];
        p->Add(list);
        p->StringGridRefresh();
        Form1->Caption=IntToStr(sizeof(list));;
        delete [] p;
 
}
//---------------------------------------------------------------------------
SPI *p=new SPI;
при добавлении создается новый объект, а указатель на старый теряется.
0
2 / 2 / 1
Регистрация: 23.04.2009
Сообщений: 24
30.04.2009, 07:04  [ТС]
подскажите, что сделать, пожалуйста
0
 Аватар для NickA
35 / 34 / 17
Регистрация: 28.04.2009
Сообщений: 67
30.04.2009, 07:26
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
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  SPI *p=new SPI;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int u=1;
        if(Form1->Edit1->Text==" ") u=0;
        if(Form1->Edit2->Text==" ") u=0;
        if(Form1->Edit3->Text==" ") u=0;
        if(Form1->Edit4->Text==" ") u=0;
        if(u==0)
                {
                ShowMessage("Заполните все поля!");
                return;
                }
        NOTE list;
        strcpy(list.Family,Form1->Edit1->Text.c_str());
        strcpy(list.Name,Form1->Edit2->Text.c_str());
        strcpy(list.Date,Form1->Edit4->Text.c_str());
        strcpy(list.Place,Form1->Edit3->Text.c_str());
        char str[10];
        p->Add(list);
        p->StringGridRefresh();
        Form1->Caption=IntToStr(sizeof(list));;
}
//---------------------------------------------------------------------------
На событии формы OnDestroy написать код:
C++
1
delete [] p;
0
2 / 2 / 1
Регистрация: 23.04.2009
Сообщений: 24
30.04.2009, 20:13  [ТС]
Не помогает
0
 Аватар для NickA
35 / 34 / 17
Регистрация: 28.04.2009
Сообщений: 67
01.05.2009, 20:43
Что именно теперь не работает?
0
 Аватар для Oxotnuk
78 / 78 / 6
Регистрация: 18.06.2009
Сообщений: 533
19.06.2009, 04:28
Кстати,попробовал этот код,тоже только 1 строку в стрингрид загоняет...

Добавлено через 4 часа 34 минуты 44 секунды
А когда вешаешь,на событие формы OnDestroy,говорит,что [C++ Error] Unit1.cpp(220): E2451 Undefined symbol 'p'
Конечно,можно сделать цикл,если ячейка NULL,то добовляем запись,а если нет,то наращиваем...
0
 Аватар для NickA
35 / 34 / 17
Регистрация: 28.04.2009
Сообщений: 67
01.07.2009, 08:54
C++
1
2
3
4
5
6
SPI *p;
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  p=new SPI;
};
Ошибка потому что переменная глобально не объявлена.
0
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 11
21.03.2010, 13:32
Там при віполнение функции Add есть ненужный оператор
C++
1
2
3
while(p->next!=NULL){
p = p->next;
}
закоментируй.
0
2 / 2 / 1
Регистрация: 23.04.2009
Сообщений: 24
22.03.2010, 09:42  [ТС]
Если в линейном списке содержатся записи, то прежде чем добавить новую запись он находит последнюю и уже после нее добавляет новую запись.
C++
1
2
3
while(p->next!=NULL){ //когда следующий элемент не равен к нулю
p = p->next;//переходим к следующему
}
если нужно, то могу вечером выложить готовую программу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.03.2010, 09:42
Помогаю со студенческими работами здесь

Линейный однонаправленный список
Есть программа, которая инициализирует, заполняет и удаляет список. При компиляции появляется ошибка, что c и m в функции main() не...

Однонаправленный линейный список
здравствуйте! помогите помочь написать задача или киньте ссылку по её решению. &quot;однонаправленный линейный список. максимальный...

Линейный однонаправленный список
ПОМОГИТЕ СДЕЛАТЬ ПОЖАЛУЙСТА Читая целые числа из текстового файла, создать линейный односвязный список а) добавлением нового элемента...

Линейный однонаправленный список
Можно ли выводить на печать элементы однонаправленного линейного списка? Если да, то пожалуйста подскажите как. Еще - как такие списки...

Линейный однонаправленный список
всем доброго времени не получается создать функцию слияния двух списков методом расчесок( допустим первый список 1 3 5 второй 2 4 6 а после...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru