PDA

View Full Version : مقایسه ساختمان داده



dada_vahid
شنبه 21 خرداد 1390, 21:24 عصر
با سلام دوستان من دارم در مورد ساختمان داده ها مطلب می خونم چند تا PDF . توی هر کدام از این آموزش ها یک مدل از پیاده سازی رو توضیح داده من این مثال ها رو مگذارم ممنون میشم اختلاف این کد هارو بیان کنید


این تعریف نوع اول هستش


typedef struct node *ptr;
typedef struct node{
int data;
ptr next;
}
node;
ptr first;

برای گرفتن مقدار از حافضه هم این دستور رو به کار بردن
first =(ptr) malloc (sizeof(node));

نوع دوم
struct node{
int data;
node *next;
};
node *first =NUL
l;
برای گرفتن مقدار از حافضه هم این دستور رو به کار بردن
node *first=new node;

rezaricky
یک شنبه 22 خرداد 1390, 14:01 عصر
اینجا تفاوتشون رو توضیح داده:
http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free

dada_vahid
یک شنبه 22 خرداد 1390, 21:37 عصر
تشکر من زبان مادری رو به سختی درک می کنم این که دیگه....... یک تعریف ساده میخوام بعضی از خط های برنامه رو درک نمی کنم

V0RTEX
دوشنبه 23 خرداد 1390, 13:40 عصر
اولی خونه های حافظه ی پشت سر هم رو می گیره مثلا اگه یه Pointer داشته باشی برای اشاره به خونه ی حافظه ی بعدی کافیه Pointer رو +1 کنی
ولی تو دومی حافظه ها پشت سر هم گرفته نمی شن و کلا با هم خیلی فرق دارن اگه خواستی بگو بازم فرقاشو بگم

quiet_programmer
دوشنبه 23 خرداد 1390, 15:55 عصر
با سلام.


اولی خونه های حافظه ی پشت سر هم رو می گیره مثلا اگه یه Pointer داشته باشی برای اشاره به خونه ی حافظه ی بعدی کافیه Pointer رو +1 کنیاصلا اینجوری نیست کی گفته اینو؟

بیبنید کدهایی که شما نوشتید یکیش به زبان c و یکی به زبان ++c هست.

در بعضی از ورژنهای قدیمی c امکان تعریف خود ساختار در داخل ساختار وجود نداشت برای همین از دستور typedef استفاده میکردند. با این دستور میتونی یه اسم جدید به یک نوع متغییر بدی.

مثلا اگه شما تعریف زیر رو داشته باشید.
typedrf int myint

الان با این تعریف شما میتونین برای تعریف متغییر از نوع int از دستور زیر استفاده کنین.

myint number;

زمان کامپایل هم myint با int جایگزین میشه.

تو کد شما هم دستور زیر
typedef struct node *ptr;


ساختار تعریف شده کاربر به اسم *struct node رو نامگذاری میکنه به اسم ptr. به * دقت کن یعنی نوع داده معمولی نه یه نوع اشاره گر از نوع داده node.

first =(ptr) malloc (sizeof(node));


این دستور هم اصلا ربطی به نوع تعریف ساختارتون(البته از نحو تعریف تو مثال شما) نداره و شما میتونید تو همین کد از دستور node *first=new node برای گرفتن حافظه اقدام کنید. ولی حواست باشه که این نحو تعریف بره زبان ++c هست و تو زبان c کار نمیکنه.

کد دوم هم مثل کد بالایه که نوع تعریف ساختار تو بعضی از کامپایلرهای c و در تمامی کامپایلرهای ++c قابل اجرا است. همچنین دستور حافظه گرفتن فقط تو زبان ++c مجازه.

dada_vahid
سه شنبه 24 خرداد 1390, 21:13 عصر
تشکر یک سوال دیگه برام پیش آمده من الان توی لست پیوندی اسم گره ها یگی هستش و فقط اسم اشاره گره فرق میکنه درسته ؟؟؟ یا من اشتباه میکنم اگه میشه این سوال رو هم پاسخ بدید با تشکر

quiet_programmer
چهارشنبه 25 خرداد 1390, 10:06 صبح
با سلام.

من متوجه نشدم ولی برداشت من از سوالتون باید بگم نه. نوع گره یکیه و فقط اسم متغیر از اون نوع متفاوت میشه. مثلا شما یه متغیر از نوع node تعریف میکنین مثلا به اسم first یه متغیر دیگه به اسم last از نوع node. پس بینین نوع یکه node و شما دوتا متغیر به اسم first و last تعریف کردین که از یک نوعن. مثلا شما تعریف میکنین int x,y یعنی دوتا متغیر که نوعشون یکیه ولی اسمشون فرق میکنه. و میتونین دستوراتی همچون x=y یا x=other رو اشته باشین. در مورد ساختمان داده تعریف شده هم همین شکلیه.

امیدوارم متوجه شده باشین