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

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

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

Объяснить работу функции - C++

03.06.2012, 19:44. Просмотров 300. Ответов 4
Метки нет (Все метки)

Может кто объяснить работу функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void zagalovok()
{
  Node *t;
  head=new Node();
  t=head;
  int V;
  cout<<"Введите список элементов:\n ";
  cin>>V;
  while  (cin.good())
  {   t->next = new Node();
     t = t->next; t->elem = V;
        cin>>V;}
  t->next = head->next;
}
точнее что хранится в t=head; указатель на адрес заголовка???
вот вся прога

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
#include <iostream>
#include <time.h>
#include <stdlib.h>
 
using namespace std;
struct Node
{
    int elem;
    Node * next;
};
Node*R,*head;
//Ввод списка элемементов 
void zagalovok()
{
  Node *t;
  head=new Node();
  t=head;
  int V;
  cout<<"Введите список элементов:\n ";
  cin>>V;
  while  (cin.good())
  {   t->next = new Node();
     t = t->next; t->elem = V;
        cin>>V;}
  t->next = head->next;
}
void Vivod()
//вывод содержимого списка без заголовка
{
  Node *t;
  t = head->next;
  cout<<"Элементы списка: ";
  if  (t!=NULL)
  {
      cout<<(t->elem)<<" "; t = t->next;
      while  (t!=head->next)
    { cout<<t->elem << " "; t = t->next; }
  }
  else  cout<<"Список пуст";
  cout<<"\n";
}
//находим элемент в списке
Node *Find(int V)
{   Node *t;
    int help=1;
    R = NULL; t =head->next;
    if (t!=NULL){
    while (t->next!=head->next && R==NULL)
    { if  (help==V) R = t;
      else { t = t->next;help++;}
 
        if  (R==NULL && help==V)
            R = t;}}
    return R;
}
//добавление элементов
void Add ( int V)
    {
     Node *h;
  h =new Node();
  h->elem = V; h->next = R->next;
  R->next = h;
}
void Del()
//Удаление элемента  
{
  Node *z,*h;
  if  (R->next!=head->next)
  {
      h = R->next;
      R->elem = R->next->elem;
      R->next = R->next->next;
      delete h;}
  else  if  (R->next==R)
        { //если один элемент
           h = head->next; head->next = NULL;
          delete h;  }
       else
       {
         //удаление последнего эл-та
         z = head; h = head->next;
         while  (h!=R)
           { z = h; h = h->next; }
         z->next = z->next->next;
         delete h;
        }}
//Mеню
int main()
{ 
  int V;
  char ch;
    setlocale(LC_ALL, "Russian_Russia.1251");   
    zagalovok();
    cin.clear();
    cin.ignore(255, '\n');
    while(1)
    {
        Vivod();
   cout << "Меню" << endl;
        cout << "1 - Добавление" << endl;
        cout << "2 - Удаление" << endl;
        cout << "3 - Выход" << endl;
        cout << "==============" << endl;
    cin>>ch;
    cin.ignore(255, '\n');
    switch(ch){
    case '1':cout<<"Введите индекс элемента перед которым добавить новый элемент:";
        cin>>V;cin.ignore(255, '\n');
        if (!cin.good()) {
        cout << "Ошибка ввода";
        cin.clear();           
        cin.ignore(255, '\n');}
        else if (Find(V)==NULL) cout<<"Ошибка ввода\n";
        else
            cout<<"Введите новый элемент: ";
            cin>>V;
            cin.ignore(255, '\n');
            if (!cin.good()) {
            cout << "Ошибка ввода" ;
            cin.clear();           
            cin.ignore(255, '\n');
                            }
            else{Add(V);
            cout<<"Элемент добавлен нажмите Enter";}
            system("cls");
    break;
        case '2':cout<<"Введите удаляемый элемент элемента: ";
            cin>>V;cin.ignore(255, '\n');
            if (!cin.good()) {
            cout << "Ошибка ввода";
            cin.clear();           
            cin.ignore(255, '\n');
                            }
            else
            if (Find(V)==NULL) cout<<"Ошибка ввода\n";
            else {Del();cout<<"Элемент удален\n";}
                system("cls");
            break;
    case '3':
        return 0;
            break;
        default: {cout<<"Ошибка ввода";
                        system("cls");}}}
    cin.clear();
    return 0;
        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 19:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объяснить работу функции (C++):

Работа функции qsort - объяснить работу функции - C++
#include&lt;iostream&gt; #include&lt;cstdlib&gt; int mysort(const void *arg1, const void *arg2); int main() { const short ARR_SIZE=5; int...

Объяснить работу функции, вычисляющей сумму цифр числа - C++
Добрый вечер. Наткнулся на код, который работает , но не понял как работает функция getSumOfNumber . Программа для суммы цифр числа от 0...

Объяснить работу функции, возвращающей указатель на указатель на char - C++
Добрый день! Сможете объяснить что означает запись char **InputFile(int &amp;strings);? Почему именно двойное **? Буду очень благодарна...

Объяснить работу Memcpy - C++
Доброго времени суток! Можете пояснить работу memcpy под C++? Что-то у меня определённо работает не так. Например такой код: ...

Объяснить работу кода - C++
Подскажите пожалуйста как работает этот код при F(9). На экран выводит 131159, но как это происходит? void F(int n) { if (n &gt; 0) ...

Объяснить работу кода - C++
Объясните что происходит в данном коде #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include&lt;cmath&gt; int _tmain(int argc, _TCHAR*...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
03.06.2012, 20:01 #2
Добавление элемента в односвязный список происходит. А что именно вам непонятно?
Faustik
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 3
03.06.2012, 20:03  [ТС] #3
добавление понятно , а вот что находится в переменной t=head;
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
03.06.2012, 20:14 #4
Ну t - указатель на узел списка. head- указатель на голову списка. Когда мы пишем t=head мы заставляем t указывать на голову списка.
Faustik
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 3
03.06.2012, 20:24  [ТС] #5
функция new же выделяет память под переменную нужного типа и возвращает указатель на её адрес, я же выделяю сначала память потом присваиваю t указатель на голову, но голова же ещё неизвестна, значит в t содержится указатель на адрес будущего заголовка? правильно понимаю?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2012, 20:24
Привет! Вот еще темы с ответами:

Объяснить работу программы - C++
Здравствуйте. Такая задача была: Нашёл на форуме подходящую рабочую программу, но не могу полностью понять (и объяснить), как она...

Объяснить работу конструктора - C++
простите за тупое название темы Добрый вечер, возникла проблема в изучении деструкторов целом проблема не самое в деструкторов, а в...

Объяснить работу программы - C++
Во введенном слове подсчитать количество различных пар букв. Например, в слове babacabacd 5 различных пар букв, ba – 3 пары, ac – 2 пары. ...

Объяснить работу двух кодов - C++
char a={&quot;kakogo hrena?&quot;}; cout&lt;&lt;a&lt;&lt;endl; // kakogo hrena? и int a={11,22,33}; cout&lt;&lt;a&lt;&lt;endl; // 001cfb50 Собсно почему в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.06.2012, 20:24
Ответ Создать тему
Опции темы

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