PDA

View Full Version : اشکال در لیست پیوندی



1485159
چهارشنبه 05 اسفند 1388, 19:22 عصر
سلام
این برنامه چرا درست کار نمیکنه؟

//---------------------------------------------------------------------------

#pragma hdrstop

#include <tchar.h>
#include <iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
struct m
{
int d;
m *next;
};

m *first = NULL;
m *add()
{
m *l = new m;
return l;
}

int _tmain(int argc, _TCHAR* argv[])
{
m *f = new m;
m *now;
m *k;
first = f;
first->d = 50;
now = first;
for (int i = 0; i < 10; i++) {
now->next = add();
now->d = 50;
}

while (first != NULL) {
cout << first->d << endl;
k = first->next;
delete first;
first = k;
}
getchar();
return 0;
}
//---------------------------------------------------------------------------

ممنون.

1485159
چهارشنبه 05 اسفند 1388, 20:40 عصر
سلام
من کد رو به اینصورت ویرایش کردم:

//---------------------------------------------------------------------------

#pragma hdrstop

#include <tchar.h>
#include <iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
struct m
{
int d;
m *next;
};

m *first = NULL;
m *add()
{
m *l = new m;
return l;
}

int _tmain(int argc, _TCHAR* argv[])
{
m *f = new m;
m *now;
m *k;
first = f;
first->d = 30;
now = first;

for (int i = 0; i < 10; i++) {
now->next = add();
now = now->next;
now->d = 50;
}
for (int i=0; i<11; i++) {
cout << first->d << endl;
k = first->next;
delete first;
first = k;
}

getchar();
return 0;
}

مشکلی که نداره؟(از لحاظ آزاد سازی حافظه)

clover
چهارشنبه 05 اسفند 1388, 20:55 عصر
کد قبلی شما دو تا اشکال داشت.
یکی اینجا :

for (int i = 0; i < 10; i++) {
now->next = add();
now->d = 50;
}
که خودتون تصحیح کردید.

و یکی هم تابع (...)add که باید به این شکل تصحیح شود:

m *add()
{
m *l = new m;
l -> next = NULL;
return l;
}

مشکلی که نداره؟(از لحاظ آزاد سازی حافظه)
ظاهرا که نه، اما به طور کلی در لیست های پیوندی، پیمایش بر اساس تعداد گره ها انجام نمی گیرد. با رفع مشکل دوم می توانید از همان کد قبل (با چک کردن گره آخر) استفاده کنید.