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

[ تمت الإجابة ]سؤال في القوائم المتصلة

بدأه الدنيا حلوة في 12 نوفمبر 2012 · 6 رد · 595 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ارجو مساعدتي في ايجاد الخطأ في الكود

اولا فكره البرنامج هي لينكد ليست فارغه يتم الاضافه فيها من الامام عدد من العقد يتم تحديد عدد هذه العقد من قبل المستخدم

أي ان البرنامج يطلب من المستخدم ادخال عدد الطلاب

ثم يطلب اضافاه بيانات الطلاب

بعد ذلك يتم طباعه القائمه كامله

مشكلتي في البرنامج انه يطبع فقط اخر عقده تم اضافتها والمفترض انه يطبع القائمه كامله

فارجو مساعدتي

هذا الكود

#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct student
{int no;
char name[20];
struct student *next;};
typedef struct student *ptr;
typedef ptr list;
student* insert_to_front(list head,int num,char name[20])
{cout<<"enter the number & name in the front of list:";
cin>>num>>name;
student *p;
p=(student*)malloc(sizeof(student));
p->no=num;
strcpy(p->name,name);
p->next=head;
head=p;
return head;}
void traverse(list head)
{student *p1=head;
while(p1!=NULL)
{cout<<p1->no<<"\t"<<p1->name<<endl;
p1=p1->next;}}

void main()
{int size,n;
char name[20];
cout<<"enter the number of student";
cin>>size;
for(int i=1;i<=size;i++)
{cout<<"enter the number & name in the front of list:";
cin>>n>>name;}
struct student *head;
head=(student *)malloc(sizeof(struct student));
struct student *p=head;
p->no=n;
strcpy(p->name,name);
p->next=NULL;
cout<<"list after insert to front: "<<endl;
for(int i=1;i<=size;i++){
traverse(head);
head=insert_to_front(head,n,name);}
getch();
}
#2

هاذي صوره للتنفيذ الصحيح الذي من المفترض ان اصل اليه

post-257473-097312500 1352729110_thumb.j

المرفقات
IMG-20121110-WA0006.jpg

تم تعديل هذه المشاركة بواسطة الدنيا حلوة في 12 نوفمبر 2012 في 17:07

#3

تصحيح الكود :

#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

struct student {
    int no;
    char name[20];
    struct student *next;
};
typedef struct student* list;

void insert_to_front(list &head, int num, char name[20]) {
    list newStudent;
    newStudent = (student*) malloc(sizeof (student));
    newStudent->no = num;
    strcpy(newStudent->name, name);
    newStudent->next = head;
    head = newStudent;
}

void traverse(list &head) {
    list temp = head;
    while (temp != NULL) {
        cout << temp->no << "\t" << temp->name << endl;
        temp = temp->next;
    }
}

int main() {
    int size, n;
    char name[20];
    list p = NULL;
    cout << "Enter the number of student : " << endl;
    cin >> size;
    for (int i = 1; i <= size; i++) {
        cout << "Number " << i << " : ";
        cin >> n;
        cout << "Name " << i << " : ";
        cin >> name;
        insert_to_front(p, n, name);
        cout << "-----------------" << endl;
    }
    cout << endl << "List after insert to front : " << endl;
    traverse(p);
    getch();
    return 0;
}

المُخرجات :

post-219439-053353500 1352736547_thumb.p

تحياتي.

المرفقات
Example.png
#4

شكرا جزيلا

يعطيك الف عافيه

#5

لا شكر على واجب أختي الكريمة :happy:

بالمناسبة, ما اسم الكتاب الذي أخذتِ منه السؤال ؟

تم تعديل هذه المشاركة بواسطة Sn@CkeR في 13 نوفمبر 2012 في 01:40

#6

السؤال ليس من كتاب

بل تمرين لمعمل الماده (طالبه حاسب)

لدي استفسار بسيط عن الكود

لماذا وضعت علامه & في السطرين

void insert_to_front(list &head, int num, char name[20])
void traverse(list &head)

قبل head

????

تم تعديل هذه المشاركة بواسطة الدنيا حلوة في 13 نوفمبر 2012 في 03:19

#7

هذا يُسمى التمرير بالمرجع (Pass by reference) عندما نُرسل مرجع القائمة المتصلة (reference of LinkedList) ستحدث التغيرات على القائمة نفسها و ليس على نسخة منها لذا لن نحتاج إلى إعادة القائمة الجديدة.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…