الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]سؤال :متى نستعمل typedef في linked list

بدأه طموحة بلا حدود في 20 مارس 2013 · 4 رد · 1,243 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

رايت في اكثر من كود للقوائم المتصله  بعد تعريف تركيب القائمه   نغير تعريفها باستخدام typedef

مثلا :

struct my_list

{

	int num;

	
	struct my_list *next; 

						  

};
typedef struct my_list node;

وهل الكود التالي بدون استخدام   typedef  صحيح ام لا :

struct node
{
	int num;
	// This is the pointer to the next node
	node *next; 
						  
};

كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!

هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب

#2

الكود الثاني صحيح في c++ وخطأ في c. سبب الإختلاف أن بعض الأكواد تستخدم c والبعض الآخر يستخدم c++ هناك فرق بسيط بينهم في إنشاء متغير من البنية.

 

في c لايمكنك عمل هذا:

struct Node {    int value;    Node *next;};

لأن المصرف يرى Node لأول مرة، لم ينتهي من بناءها، unknown type name 'Node'. في c++ هذا ممكن. يمكن حلها إما بكتابة:

struct Node {    int value;    struct Node *next;};

أو بإستخدام typedef هكذا إذا لم نرغب بإستخدام struct Node ونريد فقط إستخدام Node:

typedef struct _Node Node;
struct _Node {
    int value;
    Node *next;
};

 

من الأفضل لو تقرائين مقالة عن الفروقات الإعرابية بين c و c++، مثلاً Where C and C++ Differ

#3

بارك الله فيك استاذ 

وعندي سؤال اخر  ياريت توضحه لي ولك كل الشكر

في الكود التالي :

#include<iostream>
using namespace std;

struct node{
 int data;
 node *next;

};
void create(node *p)
{
int data;
 
  for( ; ; ){
	   cout<<"enter data: ";
  cin>>data;
	  if(data == 0)
	  {p->next=NULL;
	   break;
	  }
	  else
	  {   p->data=data;
		  p->next=new node;
		  p=p->next;
	  
	  }
	
           }
}
void display(node *p)
{
	 while(p->next!=NULL)
  {cout<<p->data<<endl;  
  p=p->next;
  }

}

int main(){
  node *n;
  n=new node;
  create(n);
  cout<<"the list :"<<endl;
  display(n);
 

return 0;
}

في داله الmain اعلانا عن مؤشر للقائمه  ومررنا المؤشر للداله create  وانشاءنا عناصر القائمه   وهذا مفهموم

سوالي هو عندما مررنا  المؤشر n لداله عرض عناصر القائمه 

اين يقف الموشر n او الى ماذا يشير  بعد عمليه الانشاء

هل يشير الى اخر عنصر   ام الى  اول عنصر او عقده في القائمه

اتمنى اني استطعت او اوضح السؤال   ...

كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!

هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب

#4

المؤشر n مازال يشير الى بداية الــ linked list ، المؤشر p يشير الى اخر عنصر، عند استدعاء الدالة display يتم نسخ قيمة العنوان التي في n الى p ويصبح المؤشرين يشيران الى نفس الموقع في الذاكرة ، يتحرك p بينما يظل n ثابت.

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5

إستخدمي المنقح إذا أردتي معرفة محتويات المتغيرات ومعرفة كيف يعمل البرنامج.

 

ضعي نقطة توقف بعد دالة create:

 

post-231926-0-24058500-1363868493_thumb.

 

بالضغط بمكان العلامة الصفراء، ستظهر دائرة. شغلي البرنامج وأدخلي القيم وعند وصول التنفيذ للنقطة الحمراء سيتوقف عندها. إظهر المتغيرات المحلية بالذهاب للقائمة:

 

Debug > Windows > Locals

 

 

وستظهر المتغيرات المحلية في النافذة الصغيرة مع قيمها:

 

post-231926-0-17144300-1363868497_thumb.

مواضيع مشابهة