Obliczanie rozmiaru listy w języku C++

0

Mam napisany program obliczający rozmiar listy, jednak po uruchomieniu pojawiają mi się błędy. Bardzo proszę o poprawienie kodu i wytłumaczenie błędów.

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <locale.h>

using namespace std;

struct slistE1
{
  slistE1 *next;
  int data;
}

void
insert_front (slistE1 * &lista, int data)
{
  slistE1 *p = new slistE1;
  p->data = data;
  p->next = lista;
  lista = p;
}


void
delete_front (slistE1 * &lista)
{
  slistE1 *p;
  p = lista;
  if (p)
    {
      lista = p->next;
      delete p;
    }
}


int size (slistE1 * p);
{
  p = slistE1;
  int licznik = 0;
  while (p)
    {
      licznik = licznik + 1;
      p = p->next;
    }

}

void
print (slistE1 * p)
{
  setlocale (LC_CTYPE, "Polish");
  cout << "Liczba elementC3w listy: " << size (p) << endl;
  for (int i = 1; p; p = p->next)
    cout << i++ << ": " << p->data << endl;
  cout << endl;
}


int
main ()
{
  slistE1 *L = NULL;
  int i;

  srand (time (NULL));
  for (i = 0; i < 20; i++)
    {
      insert_front (L, rand () % 100);
    }

  print (L);

  for (i = 0; i < 20; i++)
    delete_front (L);

  print (L);

  return 0;
}
1

Problem na pewno jest z funkcją int size (slistE1 * p) która nie zwraca żadnej wartości.

jednak po uruchomieniu pojawiają mi się błędy

Ten kod na pewno się nie uruchomił. Poczytaj sobie dokładnie błędy jakie wypluwa kompilator.

2

Skoro piszesz w C z cin,cout,new,delete to (pisano na kolanie):

struct Node {  int data; Node *next; };
struct List { Node *head; size_t size; };
void init(List &list) { list.head=0=list.size=0; }
int size(const List &list){ return list.size; }
Node *make(int data,Node *next)
{
    Node *node=new Node;
    node->data=data;
    node->next=next;
    return node;
}
void insert_front(List &list,int data) { list.head=make(data,list.head); ++list.size; }
// resztę sam dorobisz

Ale naprawdę poczytaj o metodach, i konstruktorach.

1

@Maks530:
Patrz wyżej, i po poprawieniu błędów składniowych w linii, 12 - tej i 37 - tutaj, w zasadzie nie wiadomo, co to było; oraz po dodaniu returnu z funkcji, (size), coś się dzieje, potestuj.

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <locale.h>

using namespace std;

struct slistE1
{
  slistE1 *next;
  int data;
};

void
insert_front (slistE1 * &lista, int data)
{
  slistE1 *p = new slistE1;
  p->data = data;
  p->next = lista;
  lista = p;
}

void
delete_front (slistE1 * &lista)
{
  slistE1 *p;
  p = lista;
  if (p)
    {
      lista = p->next;
      delete p;
    }
}

int size (slistE1 * p)
{
  slistE1 * tmp = p;
  int licznik = 0;
  while (tmp)
    {
      licznik = licznik + 1;
      tmp = tmp->next;
    }
  return licznik;
}

void
print (slistE1 * p)
{
  setlocale (LC_CTYPE, "Polish");
  cout << "Liczba elementC3w listy: " << size (p) << endl;
  for (int i = 1; p; p = p->next)
    cout << i++ << ": " << p->data << endl;
  cout << endl;
}

int
main ()
{
  slistE1 *L = NULL;
  int i;

  srand (time (NULL));
  for (i = 0; i < 20; i++)
    {
      insert_front (L, rand () % 100);
    }

  print (L);

  for (i = 0; i < 20; i++)
    delete_front (L);

  // print (L);

  return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1