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

Реализация очереди на основе связанного списка - C++

Восстановить пароль Регистрация
 
Aecttann
 Аватар для Aecttann
5 / 5 / 0
Регистрация: 19.10.2013
Сообщений: 257
10.06.2014, 22:11     Реализация очереди на основе связанного списка #1
Реализация очереди на основе связанного списка

в строках хэдэра
C++
1
2
   tmp->ch.name = ch1.name;
   tmp->ch.surname = ch1.surname;
получаю ошибки
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h||In member function 'void Queue :: push(Chuvak)':|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|39|error: invalid array assignment|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|40|error: invalid array assignment|

и в главной:

C++
1
ch[k-1].surname = s;
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp||In function 'int main()':|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp|42|error: incompatible types in assignment of 'char' to 'char [25]'|

хэд:
Кликните здесь для просмотра всего текста
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
#ifndef UNTITLED1_H_INCLUDED
#define UNTITLED1_H_INCLUDED
#include <iostream>
#include <string.h>
#include <iomanip>
 
using namespace std;
 
int size=0;
 
class Chuvak
{
    public:
    char name[25];
    char surname [25];
    int year;
};
 
class Node
{
    public:
    Chuvak ch;
    Node *next;
};
 
class Queue
{
    public:
    Node *top = new Node;
 
 
void push(Chuvak ch1)
{
 
    Node *tmp = new Node;
    strcpy(tmp->ch.name,ch1.name);
    strcpy(tmp->ch.surname,ch1.surname);
 //   strcpy(tmp->ch.year,ch1.year);
    tmp->ch.name = ch1.name;
    tmp->ch.surname = ch1.surname;
    tmp->ch.year = ch1.year;
    tmp->next = top;
    top=tmp;
 
    size ++;
 
}
 
 
void *pop()
{
    Node *pv = top;
    top = top->next;
                  // освобождаем память, тем самым удалили вершину
         cout<<endl<<"Ty ubral ne togo parnya "<<endl<<pv->ch.surname<<") "<<pv->ch.name<<" "<<endl;
         size--;                 //Вывод текущего элемента на экран
       delete pv;                     // возвращаем значение, которое было в вершине
}
 
void *Show()
{
    cout<<"Est` cho v razmere: "<<size<<endl;
    Node *pv=top;
    int g=0;
    while(g<size)
    {
        cout << pv->ch.surname << ") " << pv->ch.name <<"  "<<endl;
        pv=pv->next;
       g++;
    }
 
}
 
void *find(char d[])
{
     Node *pv=top;
     int c=0;
    while(pv->next)
    {
        if((strcmp(d,pv->ch.name)==0||(strcmp(d,pv->ch.surname)==0)))
           {
               cout<<") "<<pv->ch.name<<pv->ch.surname<<" "<<endl;
               c++;
           }
        pv=pv->next;
    }
    if(strcmp(d,pv->ch.name)==0||(strcmp(d,pv->ch.surname)==0))
           {
               cout<<") "<<pv->ch.name<<pv->ch.surname<<" "<<endl;
               c++;
           }
           if(c==0)
            cout<<endl<<"Ty iskal ne togo chuvaka";
 
}
};
#endif // UNTITLED1_H_INCLUDED


главная:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include "Untitled1.h"
 
int main()
{
    int z=1,k=1,n=5;
    Queue mn;
    Chuvak *ch;
    ch=new Chuvak[n];
strcpy( ch[0].name,"Пелевин");
strcpy( ch[0].surname, "Витёк");
//strcpy( ch[0].year, "1995");
 
    mn.push(ch[0]);
    k++;
 
strcpy( ch[k-1].name,"Булгаков");
strcpy( ch[k-1].surname, "Мишаня");
//strcpy( ch[k-1].year, "1994");
 
    mn.push(ch[k-1]);
    k++;
 
    int inn=0;
    int s_pop,i,ask;
    char s;
    char d[15],*form[3];
    while(z==1)
    {
        mn.Show();
        cout<<endl<<"______________________________________________"<<endl<<endl;
        cout<<"Hochew` vt0lknut` chuvaka? 1 - DA   2- NE :"<<endl;
        cin>>inn;
            if(inn==1)
            {
                cout<<endl<<" Enter name :";
                cin>>d;
                strcpy(ch[k-1].name,d);
 
                cout<<endl<<"Enter surname = ";
                cin>>s;
                ch[k-1].surname = s;
 
                mn.push(ch[k-1]);
                k++;
 
                mn.Show();
                cout<<endl<<"______________________________________________"<<endl<<endl;
            }
 
    cout<<endl<<"Do you want to pop ?  1 - YES   2- NO : "<<endl;
    cin>>s_pop;
    if(s_pop==1)
    {mn.pop();
    k--;
    }
 
cout<<endl<<"______________________________________________"<<endl<<endl;
 
    cout<<endl<<"Do you want to find something?  : 1 - YES   2- NO : ";
    cin>>ask;
    if(ask==1)
    {
        cout<<endl<<"Enter the key for search - ";
        cin>>d;
        mn.find(d);
    }
 
cout<<endl<<"______________________________________________"<<endl<<endl;
 
 
    cout<<endl<<"Want more? : 1 - YES   2- NO : "<<endl;
    }
 
    return 0;
}


Добавлено через 2 минуты
Если нужно полное задание:
Кликните здесь для просмотра всего текста
На базе класса Queue (очередь на основе связанного списка) необходимо реализовать простую базу данных. Для реализации базы данных можно создать свой класс, который необходимо унаследовать от класса Queue. База данных предназначена для хранения информации о студентах, имеющих задолженности по предметам. Элемент базы данных включает несколько полей: 1) фамилия 2)имя 3) год рождения. База данных должна позволять добавлять и удалять элементы (по правилу FIFO), выводить информацию о студентах на экран, а также выводить на экран информацию по сформированному к ней запросу.
В данном случае запрос заключается в поиске элементов списка содержащих в одном из полей какое-то конкретное значение. Поле, по которому осуществляется поиск, называется ключевым. Ключевым может быть любое из трех полей. Например, база включает 3 элемента: 1) Пелевин Виктор 1995; 2) Булгаков Михаил 1994; 3) Веллер Михаил 1996. Запрос осуществляется по полю “имя” со значением “Михаил”. В ответ на поисковый запрос база выведет на экран информацию о двух элементах: Булгаков Михаил 1994; Веллер Михаил 1996.
Для работы с базой данных необходимо реализовать консольное меню, которое должно обеспечивать ввод данных в базу, удаление данных из базы, поиск информации в базе, вывод данных базы на экран, предложение пользователю выйти из программы или продолжить работу.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
you_rule
 Аватар для you_rule
56 / 57 / 21
Регистрация: 08.03.2014
Сообщений: 138
10.06.2014, 23:19     Реализация очереди на основе связанного списка #2
Подключаем
C++
1
#include <string>
Заменяем
C++
1
2
3
4
5
6
7
class Chuvak
{
    public:
    string name;
    string surname;
    int year;
};
Радуемся
Aecttann
 Аватар для Aecttann
5 / 5 / 0
Регистрация: 19.10.2013
Сообщений: 257
10.06.2014, 23:28  [ТС]     Реализация очереди на основе связанного списка #3
кажется, пока рано радоваться)

Кликните здесь для просмотра всего текста
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|31|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h||In member function 'void Queue :: push(Chuvak)':|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|38|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|39|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h||In member function 'void* Queue :: pop()':|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|60|warning: no return statement in function returning non-void [-Wreturn-type]|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h||In member function 'void* Queue::Show()':|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|74|warning: no return statement in function returning non-void [-Wreturn-type]|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h||In member function 'void* Queue::find(char*)':|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|82|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '2' to 'int strcmp(const char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|82|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '2' to 'int strcmp(const char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|89|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '2' to 'int strcmp(const char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|89|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '2' to 'int strcmp(const char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|97|warning: no return statement in function returning non-void [-Wreturn-type]|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp||In function 'int main()':|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp|10|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp|11|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp|17|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp|18|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp|38|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp|25|warning: unused variable 'i' [-Wunused-variable]|
C:\Program Files\CodeBlocks\Projects\ocheredkakte\main.cpp|27|warning: unused variable 'form' [-Wunused-variable]|
||=== Build finished: 11 errors, 6 warnings (0 minutes, 0 seconds) ===|
you_rule
 Аватар для you_rule
56 / 57 / 21
Регистрация: 08.03.2014
Сообщений: 138
10.06.2014, 23:35     Реализация очереди на основе связанного списка #4
Aecttann,
C++
1
strcmp(d,pv->ch.name)==0
заменяем на
C++
1
(d==pv->ch.name)
ну и аналогичные также заменяем, со строками легче работать
Aecttann
 Аватар для Aecttann
5 / 5 / 0
Регистрация: 19.10.2013
Сообщений: 257
10.06.2014, 23:53  [ТС]     Реализация очереди на основе связанного списка #5
you_rule,

C++
1
    strcmp((tmp==pv->ch.name));
C:\Program Files\CodeBlocks\Projects\ocheredkakte\Untitled1.h|38|error: no match for 'operator==' in 'tmp == ((Queue*)this)->Queue :: pv->Node::ch.Chuvak::name'|

боюсь, так и не понял что нужно сделать
you_rule
 Аватар для you_rule
56 / 57 / 21
Регистрация: 08.03.2014
Сообщений: 138
10.06.2014, 23:56     Реализация очереди на основе связанного списка #6
покажу наглядно
C++
1
2
3
string a="fff";
string b="fff";
if (a==b){...}
без strcmp, сравниваете, как примитивные типы
Yandex
Объявления
10.06.2014, 23:56     Реализация очереди на основе связанного списка
Ответ Создать тему
Опции темы

Текущее время: 00:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru