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

Linked List

مغلق
بدأه saeednet في 11 أبريل 2005 · 6 رد · 561 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيفكم اليوم إن شاء الله بخير :rolleyes:

انا عارف اسألتي كثيرة لكن الله يعينكم :unsure:

المهم

مثال بسيط عن Linked List

ليه يطلع الخطأالتالي مع اني في Node.h سويت set & get for Data

المفروض ان List يعرفها واذا خليت Data in public يمشي البرنامج تمام

//+&+&+&+&+&+&+&+&+&+&+&     Node.h     +&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&

/*-------------------------------------------------------------*/
#ifndef NODE_H
#define NODE_H
class Node
{
public:
	Node(char c):Data(c),Next(0){}
	~Node();
	void setData(char c);
	char getData() const;
	Node *getNext() const;
private:
	char Data;
	Node *Next;
};
/*-------------------------------------------------------------*/

/*-------------------------------------------------------------*/
Node::~Node()
{
	delete Next;
}
/*-------------------------------------------------------------*/
void Node::setData(char c)
{
	Data=c;
}
/*-------------------------------------------------------------*/
char Node::getData() const
{
	return Data;
}
/*-------------------------------------------------------------*/
Node *Node::getNext() const
{
	return Next;
}
/*-------------------------------------------------------------*/
#endif
//+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&

//+&+&+&+&+&+&+&+&+&+&+&     List.h     +&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&

/*-------------------------------------------------------------*/
#ifndef LIST_H
#define LIST_H
#include "Node.h"
class List
{
public:
	List();
	~List();
	void Insert_First(char c);

private:
	Node *First;
	char *Name;
};
/*-------------------------------------------------------------*/
List::List()
{
	First=0;
}
/*-------------------------------------------------------------*/
List::~List(){}
/*-------------------------------------------------------------*/
void List::Insert_First(char c)
{
	Node *p=new Node(c);
	p->Data=c;
	p->Next=First;
	First=p;
}
/*-------------------------------------------------------------*/
#endif

//+&+&+&+&+&+&+&+&+&+&+&    Main.cpp     +&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&
#include <iostream.h>
#include "List.h"

void main()
{
	List P;
	P.Insert_First('S');
}

وتقبلوا تحياتي

#2

على ما أعتقد أن private لايمكن الوصول اليها الا من أحد الدوال الموجودة داخل الفئة(طبقة) خذ هذا المثال البسيط :

#include<iostream>

using namespace std;

class
{
private:
	int a;
}Object;

int main(int argc,char **argv[])
{
	Object.a = 50;
	return 0;
}

ستجد فيه نفس الخطأ

و إذا جعلته

#include<iostream>

using namespace std;

class
{
public:
	int a;
}Object;

int main(int argc,char **argv[])
{
	Object.a = 50;
	return 0;
}

لن يكون به أي خطأ

#3

السلام عليكم

كما ذكر الاخ الكريم GameDev4Arab فالخطاء هو فى انك تحاول الوصول لعنصر private فى node من كلاس اخر ولكن اختلف معه فى الحل.

انا برئي الحل الافضل هو بإستخدام الدوال التى سميتها get و set فمثلاً بدل

p->Data=c;

إستخدم التالي:

p.setData(c);

بالنسبه لـ Next يمكنك إضافه بعض الدوال للكلاس حتى لا تظطر إلى تغير العناصر يدوياً فى كل مره تريد فيها إدخال او حذف عنصر جديد.

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#4

GameDev4Arab

احمد غريب

يعطيكم العافية على الرد السريع

لكن المشكلة اني ملزم بحل معين

طيب الآن في Main

//+&+&+&+&+&+&+&+&+&+&+&    Main.cpp     +&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&
#include <iostream.h>
#include "List.h"

void main()
{
List P;
P.Insert_First('S');
}

أردت إضافة حرف آخر كيف الطريقة

مثال : في المرة الأولى اضفة S

أريد إضافة مثلاً M

أنا سويت الطريقة التالية

#include <iostream.h>
#include "List.h"


void main()
{
	List P;
	P.Insert_First('S');
	P.Insert_First('M');
}

لكن المشكلة بعد تنفيذ البرنامج مايظهر أي خطأ او وورنينق

لكن بعد تنفيذ البرنامج تظهر الرسالة التالية

error_1142005122230.5749475.gif

وشكراً لكم

#5

أعد بناء البرنامج من الأول أخي و بدقة

أحسن

#6

GameDev4Arab

كلام أخوي صحيح أعدت كتابة البرنامج من جديد واكتشفت الخطأ من أول افكر أن الخطأ في Main لكن العكس

أبشركم عرفت ويييييييين الخطأ

للفائدة بقولكم وين الخطأ

الخطأ في الـ Destructor الي في Node

احذفوا الـ Destructor من الكود يمشي الكود 100 %

عاد الان سهلة عليكم المهمة

كيف كتابة الـ Destructor الصحيحه للـ Node

تحياتي

تم تعديل هذه المشاركة بواسطة saeednet في 12 أبريل 2005 في 19:07

#7

مثل ما كتبت لك في CCIS Groups ..

ماله داعي أبدا كتابة Destructor للنود ..

لأن الكومبايلر ينشأ من نفسه Destructor لها ..

خصوصا في ظل عدم وجود أي داينمك أرري فيها :)

تحياتي حبيبي ..

وبالتوفيق مع الـ 113 :D..

هذا الموضوع مغلق.

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