как ведут себя структуры в с ++ - PullRequest
0 голосов
/ 11 апреля 2011

привет, ребята, я читал следующий код из учебника, когда застрял со следующим кодом:

#include <iostream>
#include <string>
using namespace std;

struct Node {
 int roll;
 string name;
 Node *next;
};

void append (Node *front, Node *newnode) {

 Node *n = front;
 if (n==NULL) return;
 while (n->next != NULL) n = n->next;
 n->next=newnode;
}




int main (int argc, char *argv[]) {

 int choice;
 int roll;
 string s;

 Node *front = NULL;
 Node *n;


 while (true) {
   cout << "choice? (0:create and append, 1:find 2:exit)" << endl;
   cin >> choice;
   switch (choice) {
    case 0: cout << "roll?"; cin >> roll; 
        cout <<"name?"; cin >> s;
        n = new Node(); 
        n->roll=roll; n->name=s;
        n->next=NULL;
        if(front==NULL) front = n;
        else append (front, n);
        break;
    case 1: cout << "roll?"; cin >> roll;
        n=front;
        if (n==NULL) break;
        while ((n->next != NULL)&&(n->roll!=roll)) n = n->next;
        if (n->roll==roll) cout << n->name << endl; 
        else cout << "not found\n";
        break;
    case 2: return 0;
    default: cout << "unrecognized choice\n";
  }
 }
}

Я не понимаю, как они создают разные записи, используя одну и ту же структуру "узел".И что делает new node()?Также кто-нибудь может объяснить, как работает функция добавления?Как это добавить новые записи в конце ??Пожалуйста, помогите мне, поскольку я новичок в C ++.Спасибо заранее

Ответы [ 3 ]

3 голосов
/ 11 апреля 2011

В C ++ структура аналогична классу, за исключением общедоступного доступа по умолчанию.Разница в основном связана с развитием предпочтений;большинство разработчиков рассматривают класс как объект с методами, членами и наследованием, тогда как структура просто связывает вместе несколько элементов.

Этот код создает новые записи, создавая новые "узлы".Хотя он использует одну и ту же структуру для каждого узла, он связывает каждый из них со следующим в списке (через указатель «следующий» - он указывает на следующий узел в памяти).

Что касается new node() раздел, это просто выделяет память (и еще несколько вещей, но я предполагаю, что, поскольку вы новичок в C ++, вам не нужны скучные детали!

Возможно, вам нужен учебник? Попробуйте это !

2 голосов
/ 11 апреля 2011

Это связанный список. Каждый объект узла (new создает новый экземпляр структуры Node, который затем является объектом типа Node). Передний узел устанавливается первым, если не установлен раньше. Обычно это называется заголовком связанного списка. После этого каждое новое значение "roll" будет устанавливаться на новый экземпляр и добавляться в список.

1 голос
/ 11 апреля 2011

Простое объяснение:

void append (Node *front, Node *newnode) {

 Node *n = front;  // assign front to a tempory Node pointer called n
 if (n==NULL) return;  // if n == NULL (points to nothing) then get out of here.
 while (n->next != NULL) n = n->next;  // loop through all node's starting from n, until n->next is NULL (points to nothing)
 n->next=newnode; // assign newnode to last n->next which is the end of the node tree
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...