Sana'a University Level two Faculty of Computer & IT Data struct with c++ Stack and queue جامعة صنعاء كلية الحاسوب وتكنولوجيا المعلومات ما هو المكدس S

ملفّات مشابهة
المحاضرة الثانية

الأول في السي شارب((c#للمبتدائين

مكثف الثالثة الوحدة البوابات املنطقية 1 هاتف : مدارس األكاد م ة العرب ة الحد ثة إعداد المعلم أحمد الصالح

السالم عليكم ورحمة هللا وبركاتة كتاب تعلم برمجة االلعاب بأستخدام محرك االلعاب Unity 3D الكتاب مقدم من االستاذ : عماد عارف التوي موقع : Home OF Games ا

ABU DHABI EDUCATION COUNCIL Abu Dhabi Education Zone AL Mountaha Secondary School g-12 science section Mathematics Student Name:.. Section: How Long i

) NSB-AppStudio برمجة تطبيقات األجهزة الذكية باستخدام برنامج ( ) برمجة تطبيقات األجهزة الذكية باستخدام برنامج ( NSB-AppStudio الدرس األول ) 1 ( الدرس

الدرس : 1 مبادئ ف المنطق مكونات المقرر الرسم عناصر التوج هات التربو ة العبارات العمل ات على العبارات المكممات االستدالالت الر اض ة: االستدالل بالخلف ا

Microsoft Word - C#2

السالم عليكم و رحمة هللا شرح ربط قاعدة بيانات Access بال.. C# مذا ستستفيد من هذا الموضوع!! -معرفة طريقة صنع قاعدة بيانات بالAccess -ربط قاعدة البيانات

Microsoft Word - SolutionOOPFinal2011.doc

التاريخ: االمتحان النهائي لمساق برمجة متقدمة תכנות מתקדם موعد أ الزمن: ساعتان فقط الخميس 2017/7/27 )10 عالمات( السؤال األول for او )while الالزمة لما

الفصل الثاني

How To Make Connection Between Oracle DB Server 9i & Oracle Developer 6i

Banner – Hold Information SOAHOLD

محاضرة4-كورس1

الحل المفضل لموضوع الر اض ات شعبة تقن ر اض بكالور ا 2015 الحل المفص ل للموضوع األو ل التمر ن األو ل: 1 كتابة و على الشكل األس. إعداد: مصطفاي عبد العز

Microsoft Word - Excel VBA

Microsoft Word - new.doc

عربي Sign-Code Website Guide فيما يلي دلي ا ل لطلب اسم مستخدم جديد لConnect Sell من خ لل موقع.Sign-Code يسمح لك الموقع بالدخول اإلداري على اسم المستخد

ص)أ( المملكة العرب ة السعود ة وزارة التعل م اإلدارة العامة للتعل م بمحافظة جدة الب ان النموذج ة ( تعل م عام ) انفصم اندراسي األول انفترة انثانثت العام

Microsoft Word - Access VBA

الشريحة 1

اردوينو – الدرس الثامن – تغيير درجة الالوان لـ RGB LED

<4D F736F F D20D8D1EDDEC920CDD0DD20C7E1E1EDE4DFD32E646F63>

Department of Computer Information Systems

كيفية تفعيل خدمة IIS ونشر موقع ويب على الشبكة احمللي السالم عليكم اصدقائي الكرام في هذا الكتاب سنتناول ما هي خدمة المعلومات وكيفية التفعيل ونشر الموقع

دليل المستخدم لبوابة اتحاد المالك التفاعلية

Principles of C++ (Precedence)

التحكم في الجهاز عن بعد باستخدام نظام VNC

Microsoft Word - Suites_Numériques_1_sm.doc

الفرق بين البرمجة الإجرائية و البرمجة المسيرة بالأحداث :

Slide 1

توازن جسم صلب خاضع لقوتين)تذكير(.I : عندما يكون جسم صلب في توازن تحت تاثير قوتين فان و )شرط الزم لتوازن مركز القصور G(. للقوتين نفس االتجاه.)شرط الزم

مختبر البرمجة والتحليل العددي قسم علوم الجو جمل التحكم والشرط والتكرار المرحلة الثانية PROGRAM CONTROL, CONDITION AND LOOP STATEMENTS الجمل الشرطية :-

وزارة الترب ة بنك األسئلة لمادة علم النفس و الح اة التوج ه الفن العام لالجتماع ات الصف الحادي عشر أدب 0211 / 0212 األولى الدراس ة الفترة *************

ص)أ( المملكة العرب ة السعود ة وزارة الترب ة والتعل م اإلدارة العامة للترب ة والتعل م بمحافظة جدة الب ان النموذج ة ( تعل م عام ) انفصم اندراسي األول ان

محاضرات C++

Schedule Planner User Guide Target Audience: Students This tool can help you better plan your course schedule by generating a visual representation of

بسم هللا الرحمن الرحيم االسئلة المتوقعه لمادة الحاسوب م 3 شتوية 2016 االستاذ نور الدين بني عطا االسئلة المتوقعه على مادة الحفظ سؤال 1 : وضح

Microsoft Word - dériv sc maths.doc

Determinants

اختر عنوان مناسب

جامعة حضرموت

السادة وگاالت اإلعالن والعمالء احملترمني املوضوع اسعار اإلعالنات لعام ابتداء من ابريل Subject Rate card 2015 starting from April تهديگم شرگة ال

مادة اثرائية تكنولوجيا الصف الحادي عشر وحدة الوسائط المتعددة شرح برنامج VSDC إلنتاج وحترير الفيديو المشرف التربوي د.عطايا يوسف عابد مديرية التربية وال

جاهعة الوسيلة هركز الشبكات و أنظوة اإلعالم و االتصال والتعلين الوتلفز و التعلين عن بعد مودل Moodle التعل م نظام استخدام "دل ل االلكترون للطلبة" نظام ا

دولة فلسطين و ازرة التربية والتعليم العالي المبحث: تكنولوجيا المعلومات / النظري بسم هللا الرحمن الرحيم مدة االمتحان : ساعتان نموذج تجريبي مجموع العالم

دليل الحسابات دل ل الحسابات هو عبارة عن نافذة تحوي شجرة حسابات افتراض ة تضم هذه الشجرة األنواع الثالثة لتصن ف الحسابات وه حسابات ( المتاجرة األرباح وا

مدرسة هارون الرشيد الثانوية للبنين المهارات العملية / تكنولوجيا المعلومات ( الثاني عشر) إعداد/ أ. خالد الح

بسم هللا الرحمن الرحيم المادة: مقدمة في بحوث العمليات )100 بحث ) الفصل الدراسي األول للعام الدراسي 1439/1438 ه االختبار الفصلي الثاني اسم الطالب: الرق

طبيعة بحته و أرصاد جوية


1 New system technology Mahmoud said Object-Oriented Programming in C ++ Cookbook 1

الدليل التدريبي لتسجيل منتج البوابة االلكترونية للمطابقة )سابر( الدليل التدريبي لتسجيل منتج 0

The Global Language of Business دليل ارشادي الستخدام صفحة خدمات الشركات األعضاء Members Area 1

جامعة العقيد الحاج لخضر - باتنة - 1 كلية العلوم االقتصادية والتجارية وعلوم التسيير قسم التعليم األساسي مادة II دروس وتطبيقات الرياضيات لطلبة السنة األ

Allomani Warehouse User Guide

1

متطلبات النظام متطلبات جهاز الكمبيوتر الشخصي معالج Pentium 1 Intel غيغا هرتز أو أسرع نظام التشغيل Windows 2000 أوXP Windows مع Service Pack 2 أو Vista

عرض تقديمي في PowerPoint

كيفية استخدام موقع 4shared لرفع الملفات وتنظيمها على النترنت للمبتدئين. والمتقدمين في الحاسب. كتاب ل ابراهيم شاهين

منطقة العاصمة التعليمية عدد الصفحات / مخس صفحات التوجيه الفني للغة العربية الزمن / ساعة واحدة اختبار الفرتة الثالثة يف مادة اللغة العربية للصف العاشر

كل ة االقتصاد وعلوم الس اس ة االسئلة االسترشاد ة لطلبة التعل م عن بعد لمادة نظر ة التنظ م قسم:االدارة. لسنة: أوال:أختر االجابة الصح حة: مكن

الوحدة التاسعة

Microsoft Word - moneybookers

Morgan & Banks Presentation V

riyadh-geeks-mobile-first

دليل تدريبي : الحلول لما بعد اختراق الحسابات إعداد : محمد المسقطي Mohammed Al-Maskati بمساعدة : علي السباعي Ali Sibai

( IP Address ) العنوان الشبكي

جامعة المنيا - كلية العلوم Minia University Faculty of Science رشع ١ ت ا غز ا ثب 2019 /2018 ثش ب ح ا ى ١ ١ بء ا س ٠ ١ خ االع ثب غخ ا عشث ١ خ ا ؤ ا عذي

الدليل التدريبي لطلب شهادة مطابقة إرسالية )للمنتجات المستوردة( البوابة االلكترونية للمطابقة )سابر( الدليل التدريبي لطلب شهادة مطابقة إرسالية )للمنتجات

Microsoft Word - intégral 2sc exp.doc

عرض تقديمي في PowerPoint

March 5, 2016 "مقدمة إلى البرمجة الكينونية" oop Chapter 11: "struct" إعداد وتلخيص:- محمد المشرقي **تطلب من )معتز فرعون غرايبة && محمد مارس القرعان( عب

Microsoft Word - 55

قسم تكنولوجيا الحاسوب والمهن الصناعية

ورقة عمل الدرس الثاني تطبيقي اخلاص على هاتفي... برنامج App Inventor اعداد املعلمة : اماني ممدوح املصري مدرسة امحد شوقي الثانوية للبنات اختار اإلجابة ا

SP-1101W/SP-2101W eciug niitallatini kciuq 1.0v /

برنامج المساعدات المادية الذكي خطوات التقديم للمساعدة المادية...2 خطوات رفع المستندات المرفوضة...10 خطوات التاكد من حالة الطلب

الصف السادس االبتدائي الفصل الدراسي االول بسم هللا الرحمن الرحيم الصفحة محتويات الفصل الدراسي األول الموضو

WHAT’S NEW

ن 3 اإلمتحان الوطين املوحد لنيل شهادة البكالوريا الدورة اإلستدراكية 2013 اململكة املغربية وزارة الرتبية الوطنية و التعليم العالي و تكوين األطر و البحث

اختبار تحليل التباين األحادي و اختبار كرودكال والس الالمعلمي يبين السؤال التالي ست مجموعات من دول العالم توضح نسبة التحضر في كل منها حسب الموجود في ال

عرض تقديمي في PowerPoint

من نحن يف 2007 / 9 / 2 صدرت جريدة كصحيفة يومية وطنية شاملة تسعى إلى مواكبة التطورات احمللية و االقلميية والعاملية بشكل موضوعي ومبتكر إلى جانب تبني امل

8 مادة إثرائية وفقا للمنهاج الجديد األساسي الثامن للصف الفصل الدراسي األول إعداد املعلم/ة: أ. مريم مطر أ. جواد أبو سلمية حقوق الطبع حمفوظة لدى املكتبة

Microsoft Word

I تفريغ مكثف في وشيعة. 1 التركيب التجريبي: L = 40mH وشيعة معامل تحريضها C = 1μF مكثف سعته E = 6V العدة: مولد قوته الكهرمحركة ومقاومتها الداخلية r = 10

الوحدة األولى المالمح البشرية للوطن العربي عنوان الدرس : سكان الوطن العربي أوال :أكمل الجدول التالي: 392 مليون نسمة %5.3 %39.9 %60.1 عدد سكان الوطن ال

الفهرس: كيفية ضبط الموبايل/التابلت: خدمة االنترنت معرفة مسبقا على الجهاز. في حالة عدم تعريف خدمة االنترنت مسبقا على الجهاز يمكنك ضبطه يدويا ادخل على D

النسخ:

Sana'a University Level two Faculty of Computer & IT Data struct with c++ Stack and queue جامعة صنعاء كلية الحاسوب وتكنولوجيا المعلومات ما هو المكدس Stack هو احد ه اكل الب انات االكثر سهولة ستخدم بكثرة ف عالم الحواس ب : مترجمات االت حاسبة المعالجات و...الخ. ومفهومها بس ط جدا ادرس المثال االت : تخ ل ان لد نا مجموعة من االطباق "الصحون" مرصوصة فوق بعضها اي صحن وفوقه واحد اخر الى ان نصل الى اخر صحن. االن لك نض ف صحن اخر الى المجموعة جب ان نضعه على رأسهم عن اعلى ش ء top واذا اردنا ان نسحب اي عنصر جب ان نسحب الذي فوقه اوال. اي ال تستط ع سحب الصحن الرابع مثال دون ان نسحب الصحون الت تقع فوقه واال ستنكسر الصحون. مثال اذا اردنا سحب الصحن الثان جب ان نسحب كل الصحون الت تقع فوقها حتى نصل الى الصحن الثان و نسحبه وتكون المجموعة الجد دة مكونة من الصحن االول فقط وذلك الننا سحبنا كل الصحون الت تقع فوقها. و تضح المثال بهذا التعر ف: المكدس هو عبارة عن فكرة "طر قة" تطبق على المصفوفة "ل س ف كل الحاالت ولكن سنستخدم المصفوفة هنا" بح ث ان ادخال العناصر تم من اعلى "كما ف حالة الصحون" وكذلك سحب العناصر تم من اعلى. وذلك على خالف المصفوفة العاد ة مثال اذا ادخلنا ف اي مصفوفة العناصر 2 ثم.01 8 6 4 واردنا عرضها على الشاشة فان النت جة ه : 10 اي 8 6 4 2 على نفس ترت ب االدخال. 1

ولكن اذا ادخلنا االعداد السابقة ف مكدس وعرضنا عناصر المكدس على الشاشة فالنت جة ه : 2 اي 4 6 8 10 على عكس ترت ب االدخال. اي ان العنصر الداخل الى المكدس اوال هو الذي س خرج ف االخ ر والعنصر الداخل الى اعلى المكدس هو الذي س خرج اوال. Last in First Out لذلك تجد دائما مع المكدس هذه العباره وتختصر ب LIFO خالصة : *المكدس هو عبارة عن ه كل ب انات. * تم تطب ق المكدس من خالل المصفوفات او من خالل القوائم المرتبطة "سنتحدث عنها الحقا" * تبع المكدس مفهوم LIFO اي العنصر الذي دخل ف االخ ر هو الذي خرج اوال. *الدخال عنصرف المكدس جب ان نضعه فوق اعلى عنصر. ك ف سنعرف ان العنصر هو اعلى ام ال سنحتاج الى مإشر للمصفوفة "عدد صح ح " وذلك لك نعرف من هو اعلى عنصر ول كن اسمه. top ف الحق قة top ل س مإشر pointer وانما هو عدد int ولكن نستخدمه كدل ل الى العنصر االعلى ف المصفوفة عن اذا كان عندي مصفوفة من 01 عناصر والمستخدم ادخل ق مة اول عنصر ن فان المتغ ر topس حمل الق مة 0 داللة على ان العنصر الثان هو اعلى عنصر. *عمل ة ادخال العنصر الى المكدس تسمى push والت تعن دفع العنصر الى اعلى المكدس. *عمل ة سحب العنصر من المكدس تسمى pop صورة توض ح ة: اعتقد ان المفهوم اتضح قل ال والكود هو خ ر الكالم ما " قل و دل" 2

اىع ي بد عي المكدس :two operations حتى االن لد نا عملت ن وهم عمل ة ادخال العناصر الى المكدس وسم ناها push عمل ة اخراج العناصر من المكدس وسم ناها pop العمل ة push تقوم بادخال العنصر الى المكدس هذا العنصر س قوم المستخدم بتمر ره الى الدالةpush () اي اذا اردنا ادخال العنصر 7 مثال الى المكدس كل ما عل نا هو استدعاء الدالة وتمر ر العنصر 7 ال ها كاالت : كود: push(7); العمل ة االخرى وه pop تقوم بسحب العناصر من المكدس ولتنف ذ هذه العمل ة جب ان تستدع الدالة () popووضع متغ ر لك حمل ق مة العنصر الذي تم سحبه من المكدس بهذا الشكل: كود: int var=pop(); خىاسص خ االدخبه واالخشاج ف stack 3

Stackاوال : أمثلة على الداخل اوال الخارج اخ را )الداخل اخر الخارج اوال ) ثش ب ح قى ثع ي خع ي خ االدخبه واالخشاج : #include<iostream.h> #include<conio.h> اىجش ب ح عي عبى م زغ ش اىسد عشف بء ه بء//; size=10 int 1- ثب اىزىة وه ئ بء 10 زد هب صفىفخ عشف بء//; a[10],top=-1 int االخشاج داىخ عشف بء//;() pop int داخيهبء ىقع وعشف بء داىخ عشف بء ه بء//;( push(int[],int void main() اىجش ب ح ف اسزخذا هب ىغشض زغ ش عشف بء//; i,k int ثبىششط ىي شوس معذاد و سزخذ دواسح ع و ز ه بء//(++ for(i=0;i<size;i cout<<"enter the item push pleas\n"; اىج بد ادخبه ه بء ز //; cin>>k اىجىش داىخ اى اى ذخيخ اىع بصش رض ز ه بء//;( push(a,k ثبىششط ىي شوس معذاد و سزخذ دواسح ع و ز ه بء//(++ for(i=0;i<size;i اىجىة داىخ اسزذعبء ز ه بء//;" n \ cout<<"\nthe elemant pop\n"<<pop()<<" اىشبشخ ا قبف ثع و رقى //;() getch اىجىش داىخ هبرح//( k void push(int a[],int ي ب خ اىسزبك فب 1 -اىسد سبو اىزىة ارامب ششط هبرا//( if(top==size-1 cout<<" FULL STACK"; ف ز ر زي ى اىسزبك ارا// ثىازذ اىزىة ص بدح ز ه بء//; a[++top]=k اىجىش داىخ//() pop int اىصفش اصغش اىزىة مب ارا ز ه بء//( if(top<0 خبى خ اىذاىخ فئ //;" STACK cout<<"empte ز بى // ثىازذ رىة اه قصب //;[-- a[top return //********************************************************************** ثش ب ح قى ثئضبفخ سزبك فبسغخ ث ض ف اى هب 3 ع بصش.. ثعذ رأىل قى اىجش ب ح ثسزف اىشأس وعشض ثق خ اىع بصش عي اىشبشخ: #include <iostream> using namespace std; struct Node int Data; Node *Next; 4

; Node* InitStack(Node *S) S = NULL; return S; bool IsEmpty(Node *S) if (S == NULL) return true; return false; Node* Push(int x, Node *S) Node *P = new(node); P -> Data = x; P -> Next = S; S = P; return S; int Top(Node *S) if (!IsEmpty(S)) return S->Data; cout<<"stack empty..."; // un derflow Node* Pop(Node *S) if (!IsEmpty(S)) Node *P = S; S = S ->Next; delete P; return S; cout<<"stack empty..."; void main() Node *S; S = InitStack(S); 5

S = Push(10, S); S = Push(5,S); S = Push(2,S); S = Pop(S); while (!IsEmpty(S)) cout<<top(s)<<"\t"; S=Pop(S); cout<<endl; //************************************************* برنامج قوم بعمل ة االدخال واالخراج وعمل ة العرض: #include<iostream.h> #include<conio.h> //----------------------------- int top=0; const int size=5; int stack[size]; //--------------------------- int empty() if(top==0) return 1; return 0; //----------------------------- int full() if(top==size) return 1; return 0; //--------------------------------- void push(int x) if(!full()) stack[top++]=x; cout<<"the stack is full\n"; //----------------------------------- int pop() if(!empty()) return stack[top--]; cout<<"the stack is empty\n"; //------------------------------------- void show() 6

if(!empty()) for(int i=0;i<top;i++) cout<<stack[i]<<" "; //------------------------------------ main() int op; do cout<<"1-add\n"; cout<<"2-pop\n"; cout<<"3-show\n"; cin>>op; switch(op) case 1: int x; cout<<"input val\n"; cin>>x; push(x); case 3 : show(); case 2: int y =pop(); cout<<"\nthe delete of stack\n"<<y; while(op!=0);//end while-------- getch(); //The End----- //************************************************ برنامج قوم بعمل ة االدخال واالخراج استخدمنا ف هاذا المثال :struct #include<iostream.h> //******************************* const int size=5; //******************************* struct stack int top; int item[size]; ps; //***************************** void initial(struct stack *ps) ps->top=-1; cout<<ps->top; //****************************** void push(struct stack *ps,int m) if(ps->top<(size-1)) (ps->top)++; ps->item[ps->top]=m; cout<<"full\n"; //******************************** void pop(struct stack *ps) 7

if(ps->top>(-1)) cout<<ps->item[ps->top]<<endl; (ps->top)--; cout<<"empty\n"; //******************************** int main() int n, op; initial(&ps); do cout<<"chose 1 to push and 2 to pop\n"; cin>>op; switch(op) case 1:; cin>>n; push(&ps,n); case 2: return 0; pop(&ps); default: cout<<"error"; while(op!=3); هبرا اىجش ب ح ثبسزخذا اى :Dynamic Stack #include<iostream.h> اى ثبسزخذا اىجش ب ح هبرا //Dynamic Stack //******************** struct node int data; node*next; ; node*top; //***************** void push(int c) if(top==null) node*p=new node; p->data=c; p->next=null; top=p; node*p=new node; p->data=c; p->next=top; top=p; //********************** int pop() 8

خىاسص خ االدخبه خىاسص خ االخشاج node*p=top; int x=p->data; top=top->next; delete p; return x; //************************ main() int i,x; cin>>x; while(x>-1) push(x); cout<<"enter the element\n"; cin>>x; while(top!=null) cout<<"delete the element\n"<<pop()<<endl; //*************************************************************** خىاسص خ اىQueue 9

ثان ا : : Queue ب هى : Queue هو عبارة عن ه كل ب انات ستخدم لتخز ن الب انات من اجل معالجتها بح ث ان العنصر الذي دخل اوال للطابور تم معلجته اوال والعنصر الذي دخل ف االخر هو الذي تم المعالجة له ف االخر. مثال على الطابور او الك و : فترة الصبح لما كون ف ها زحمة المسافر ن خل نا نإخذ مثال طابور التؤش رة ف المطار مثال ف ولما دخلها تفجؤ ف الزحمة ولنفرض انو واحد من موظف ن المطار ؤت متؤخر على المطار لحت دخل على مكانه بس لألسف ما قدر دخل الموجودة هناك فحاول انو تجاوز المسافر ن عارف ن ل ش النو ف قانون ف الطابور انو اي عنصر ب ج راح صف ف اخر الطابور وعمل ة االضافة على الطابور بنسم ها "ا نك و" وبعد فترة تحرك الطابور لالمام النو طلع واحد لما ات وحاسب فه العمل ة وه عمل ة الحذف نسم ها "د ك و "ومتل هاذا من المسافر ن دور الموظف. هاذا الشكل العام للك و: او مثل طابور استخدام الصراف االل : ف المثال السابق فإنه المبدا الذي اتبعنا انه العنصر الذي دخل ف االول خرج ف االول وتسمى "ف رست ا ن ف رست اوت" ( first in first out) وبمعنى اخر ان عمل ة االضافة تتم على العنصر االخ ر والذي سوف نسم ة ف تم على العنصر االول والذي سوف نسم ة "فرونت ". "ر ر "والحذف 11

مالحظة :*** -:front هو فرونت وهو العنصر االول الذي تتم عل ة عمل ة الحذف. -:rear هو ر ر وهو العنصر االخ ر الذي تم اضافته وتتم عمل ة االضافه عل ه. العمل ات الت تحدث على ك و : عمل ة االضافة الت تحدث على الك و وتسمى ا نك و** وعمل ة الحذف الت تحدث على المصفوفة وتسمى د ك و** وتتكون الك و من مصفوفه + دل ل ن وهما " ر ر + فرونت ". //abdo.solh #include<iostream.h> #include<conio.h> int size=10; struct queue int rear; int front; int ele[10]; q;//******************************** void initli( queue*q) q->front=0; //front =Null; q->rear=-1; //rear=1; //***************************** int insert ( queue*q,int e ) if((q->rear)>size) cout<<"the queue is full \n"; q->rear=q->rear+1; q->ele[q->rear]=e; //**************************** int delet( queue *q) if(q->rear < q->front) cout<<"is empty \n"; return 0; return q->ele[q->front++]; //********************************** void display( queue *q) for(int i=q->front;i<=q->rear;i++) cout<<q->ele[i]<<endl; cout<<"****************"; //********************************** int main() 11

initli(&q); int z; int value; //*********************** while(1) cout<<"\n"; cout<<"enter 1 to add to queue \n"; cout<<"enter 2 to delete to queue \n"; cout<<"enter 3 to display \n"; cout<<"enter 4 to exit \n"; cin>>z; cout<<"**********"; cout<<"\n"; //******************************** switch(z) case 1 : cout<<"enter the number \n"; cin>>value; insert(&q,value); case 2: cout<<"you delete value "<< delet(&q)<<endl; case 3: display(&q); case 4: exit(0); //*********************************** //************************************************************** برنامج قوم بعمل ة االسناد من داخل البرنامج من المصفوفة والعرض وهاذة الصورة تقوم بتوض ح عمل ال ك و: #include <iostream.h> #include <conio.h> #define MAX 5 class queue private: int t[max]; int rear; int front; public: queue() front=-1; rear=-1; void del() int tmp; if(front==-1) 12

cout<<"queue is Empty"; for(int j=0;j<=rear;j++) if((j+1)<=rear) tmp=t[j+1]; t[j]=tmp; rear--; if(rear==-1) front=-1; front=0; void add(int item) if(front==-1 && rear==-1) front++; rear++; rear++; if(rear==max) cout<<"queue is Full\n"; rear--; return; t[rear]=item; void display() if(front!=-1) for(int i=0;i<=rear;i++) cout<<t[i]<<" "; cout<<"empty"; 13

; int main() queue a; int data[5]=32,23,45,99,24; cout<<"queue before adding Elements: "; a.display(); cout<<endl<<endl; for(int i=0;i<5;i++) a.add(data[i]); cout<<"addition Number : "<<(i+1)<<" : "; a.display(); cout<<endl; cout<<endl; cout<<"queue after adding Elements: "; a.display(); cout<<endl<<endl; for(int i=0;i<5;i++) a.del(); cout<<"deletion Number : "<<(i+1)<<" : "; a.display(); cout<<endl; getch(); return 0; //********************************************************************** ثش ب ح قى ثع ي خ االضبفخ اى اىن ى وىسزف اىن ى وعشض اىع بصش: #include <iostream.h> //#include<stdlib.h> #define size 10 struct queue int x[size]; int front; int rear; q; //******************************* void initilztion(struct queue *q) q->front=0; q->rear=-1; //******************************** void insert(struct queue *q,int e) 14

if((q->rear)>size) cout<<"the queue is full \n"; q->rear=q->rear+1; q->x[q->rear]=e; //********************************* int delet(struct queue *q) if(q->rear < q->front) cout<<"is empty \n"; return 0; return q->x[q->front++]; //********************************** void display(struct queue *q) for(int i=q->front;i<=q->rear;i++) cout<<q->x[i]<<endl; cout<<"****************"; //*********************************** int main() initilztion(&q); int z; int value; while(1) cout<<"\n"; cout<<"enter 1 to add to queue \n"; cout<<"enter 2 to delete to queue \n"; cout<<"enter 3 to display \n"; cout<<"enter 4 to exit \n"; cin>>z; cout<<"**********"; cout<<"\n"; switch(z) case 1 : cout<<"enter the number \n"; cin>>value; insert(&q,value); 15

case 2: cout<<"you delete value "<< delet(&q)<<endl; case 3: display(&q); case 4: exit(0); flag cirular queue add elements to flag circular queue and show them: #include<iostream.h> //#include<cstring.h> #define max 5 struct queue int data[max]; int front ; int rear; int count; qu; void initial() qu.front=qu.rear=max-1; qu.count=0; void push () if (qu.count>=max) cout<<"\t Circular Queue is FULL \n \n "; int info; cin>>info; qu.rear=(qu.rear+1)%max; qu.data[qu.rear]=info; qu.count++; int pop () if (qu.count==0) cout<<" Circular Queue Is Empty \n "; qu.front=(qu.front+1)%max; int d=qu.data[qu.front]; qu.count--; cout<< d ; 16

int main () initial (); cout<<" \t\t Please Enter The Flag CQueue \n"; for ( int l=0;l<max;l++) cout<<" \t"; push (); cout<<" \t \t Queue after adding Elements : \n"; for (int m=0;m<max;m++) cout<<"\t"; pop (); cout<<endl; //********************************************************************* برنامج قوم باالضافة والحذف والعرض و نسخ جم ع محتو ات المكدس الى مكدس اخر: #include <iostream.h> #include <conio.h> int full(int count, int size) return(count==size); int empty(int count) return count==0; void add(int que[],int &tail,int &count,int size,int val) if(tail==size-1) tail=-1; //cout<<"inter value\n"; //cin>>x; que[++tail]=val; count++; int del(int que[],int &head,int &count,int size) if(head==size) head=0; count--; return que[head++]; void copy(int que1[],int que[],int size,int tail,int &tail1,int &count,int &count1,int &head) int i,t=tail,c=count; for(i=0;i<c;i++) add(que1,tail1,count1,size,del(que,head,count,size)); 17

void show(int que[],int &head,int &count,int size) int i,x=count; for(i=0;i<x;i++) cout<<del(que,head,count,size)<<" "; ; void main() int c; int count=0,tail=-1,head=0; const int size=8; int que[size]; int count1=0,tail1=-1,head1=0; // const int size=8; int que1[size]; do clrscr(); cout<<"1- add\n"; cout<<"2-del\n"; cout<<"3-copy\n"; cout<<"4-show\n"; cin>>c; switch(c) case 1 : if(full(count,size)) cout<<"full\n"; int x; cout<<"entr value\n"; cin>>x; add(que,tail,count,size,x); case 2 : if(empty(count)) cout<<"empty\n"; cout<<del(que,head,count,size)<<"\t"; case 3 : copy(que,que1,size,tail,tail1,count,count1,head); case 4 : show(que1,head1,count1,size); getch(); while(c!=0); getch(); //************************************************************************* 18

خىاسص خ اضبفخ ف اى هب خ خىاسص خ اضبفخ ف اىجذا خ خىاسص خ اضبفخ ىد خىاسص خ اىزه ئخ //********************************************** ثالثا :Linked lists [ 1 ]مقدمة عنList Linked ( 1.1 )ما ه Linked list ( 1.2 )أهم ةlist Linked Single Linked List [2] ( 2.1 )الص غة العامة لل Single Linked List ( 2.2 )بعض العمل ات ف : list Single linked خىاسص خ Linked lists 1 إضافة عناصر 2 عرض القائمة 3 إضافة عنصر ف أول القائمة 4 إضافة عنصر ف مكان محدد 5 بحث عن عنصر ف القائمة 6 ترت ب عناصر القائمة 7 تعداد عدد عناصر القائمة 8 حذف عنصر من القائمة 9 خوارزم ات الList Single Linked 19

خىاسص خ اىسزف خىاسص خ اىجسث 21

خىاسص خ اىسزف ف اىىسظ Double Linked List [3] ( 3.1 )الص غة العامة للList Double Linked ( 3.2 )تحو ل عمل ات Single linked list إلى Double Linked List ف الحق قة آسف للطرح موضوع على ه ئة جزئ ن ول س على عدة أجزاء ولذلك ألن فقرات الموضوع مترابطة جدا ف ما ب ناهما و صعب فهمها ف أوقات متباعدة نس با. إن شاء هللا إذا فهمت هذا الموضوع سوف سهل عل ك الطر ق للفهم بعض الخوارزم ات األخرى ف تراك ب الب انات مثل Stack و Queue وغ رها الت سوف أكتب عنها ف القر ب العاجل. [ 1 ]مقدمة عن Linked List ( 1.1 )ما ه Linked list ه باختصار شد د عبارة عن قائمة من الب انات مرتبطة مع بعضها البعض وغ ر محدودة الحجم. أي انك ال تحتاج للمعرفة ما عدد الب انات المراد إدخالها إلى القائمة. ( 1.2 )أهم ةlist Linked البد أنك استخدمت المصفوفات ف العد د من برامجك وتجاربك وكلما تعرف مصفوفة تحتاج للوضع حدود المصفوفة. ولكن ماذا لو احتجت أو احتاج مستخدم البرنامج أن ض ف عدد من الب انات ز د عن حجم المصفوفة!!. 21

اظنك تعرف ماذا سوف حدث. ممكن أن تحل المشكلة باستخدام المصفوفات باستعمال المإشرات معها بنسخ المصفوفة الممتلئة إلى مصفوفة جد دة ذات حجم أكبر و لكن مشكلة هذه الطر قة ه أنك دائما تحقق من عدد العناصر هل تجاوزات حدود المصفوفة لك تز د المساحة لو احتجت لذلك. ولكن باستخدامك linked list سوف ز ل عنك هم هذه المشكلة وتدخل الب انات كما حلو لك )لكن ال تنسى حجم الذاكرة (ألنك ال تحتاج هل للمعرفة عدد الب انات المدخلة للقائمة فقط تقول للب انات )ح اكم هللا القائمة قائمتكم( وهذا عن بتعب ر آخر عن linked list كما طلق عل ها البعض على أنها مصفوفة د نام ك ة. سوف تم شرح االت ف ما بعد وبالتفص ل : ) 1( إضافة عناصر إلى القائمة-: عند إضافة عنصر نتبع آالت : أوال : نضع ب انات الترك ب ثنا ا : إذا كان هناك عنصر آخر نشئ ترك ب جد د ف الذاكرة بواسطة كلمة new ونسند عنوان ذلك الترك ب إلى المإشر next ف العنصر الحال. ثالثا : إما إذا كان العنصر الحال آخر عنصر ف القائمة نسند للمإشر next ق مةNULL 2 -عرض عناصر القائمة-: اآلن سوف نقوم للعرض عناصر القائمة وه أن نقوم المرور على كل عنصر و طباعته ب اناته. تتم العمل ة كالتال : أوال : نتحقق من العنصر هل هو آخر عنصر ف القائمة أما ال. ثان ا : إذا كان العنصر ل س العنصر األخ ر نعرض الب انات ونتحرك إلى العنصر الذي بعده. ثالثا : إذا كان العنصر هو العنصر األخ ر نتوقف. 3- تعداد عدد عناصر القائمة: مثل أي عمل ة تعداد آخرى أي نعرف عداد ومن ثم ز د بمقدار واحد. تتم العمل ة التعداد كالتال : أوال : نتحقق من العنصر هل هو آخر عنصر ف القائمة أما ال. ثان ا : إذا كان العنصر ل س العنصر األخ ر نز د العداد بمقدار واحد. ثالثا : إذا كان العنصر هو العنصر األخ ر نتوقف. 4- بحث عن عنصر ف القائمة: ف هذه العمل ة نقوم ف البحث عن عنصر من عناصر القائمة و تمم العمل ة كالتال : أوال : نتحقق من العنصر هل هو آخر عنصر ف القائمة أما ال. ثان ا : إذا كان العنصر ل س العنصر األخ ر نتحقق من ب انات العنصر و ب انات البحث ثالثا : إذا كان ب انات العنصر مطابقة للب انات البحث نتوقف رابع : إذا كان ب انات العنصر غ ر مطابقة للب انات البحث نتحرك للعنصر التال. خامسا : إذا كان العنصر هو العنصر األخ ر نتوقف. 5- ضافة في أول القائمة-: اآلن نر د إضافة عنصر جد د ف أول القائمة أي أن كون العنصر األول. وهذه العمل ة كالتال : أوال : نقوم بإنشاء ترك ب )عنصر( جد د و إضافة ب اناته. 22

ثان ا : ثم نربط الترك ب مع أول عنصر ف القائمة ثالثا : نسند للمإشر القائمة عنوان الترك ب الجد د. Linked list Linked list: is a data structure wherein each element contains both a data value and a pointer to next element in the list. بعض مم زات ال linked list ما ل : تقوم بترت ب العناصر ف الذاكرة حتى ولو كانت عشوائ ة هنا ال نحتاج لمعرفة عدد الب انات المدخلة كما ف المصفوفات الت نحدد عدد الب انات الت سوف ندخلها)نحدد حجم المصفوفة( لذالك طلق على ال linked list المصفوفات الد نام ك ة. قد قول البعض ك ف تم ترت ب العناصر ف الذاكرة حتى ولو كانت عشوائ ة الجواب هو أن كل عنصر قوم بحفظ موقع العنصر الذي ل ه)الذي بعدة(. وبتوض ح أكثر فلنرى ما ل : 23

struct nodeptr char info; struct node*next; ; This is the pointer to the next node أالن سوف ندخل ف الجد: هذه الص غة العامة ل linked list-: رعش ف سوف نبدأ أالن بؤهم العمل ات ف ال :linked list أوال : عمل ة إنشاء node وإضافة بداخل ال node الرقم 50: س تم ذالك من خالل الخوارزم ة التال ة: Initial(node*f) f=getnode( ); f->link=null; f->info=50; ; إ شبء new node ث وضع اى ؤشش f عي هب قى ثىضع رساع اىf ث null إشبسح ثأ خ أخش قى ثئدخبه 50 داخو اى node ع صش ف اىقبئ خ f اىز ش ش إى هب اى ؤشش f 50 ف هزا اى ثبه ق ب ثئ شبء اىnode اىزبى خ: 24

5 0 f ثان ا :عمل ة ربط ال لد نا هذه ال node ونر د ربط nodeأول القائمة: nodeجد دة ووضعها إال ولى ف القائمة Insert_B(node*f) node*c; c=getnode( ); c->info=40; c->link=f; f=c; إ شبء new node ث وضع اى ؤششc عي هب قى ثشثظ اىnode اىز أ شئ هب ثبى node األوى ف اىقبئ خ first قى ث قو اى ؤشش f إى اى node اىز سثط بهب ثبىقبئ خ اىز أصجسذ أوه node ف اىقبئ خ ستكون القائمة كما ل : f 7 0 c 5 0 25

ثالثا : عمل ة ربط node وسط القائمة )ل س بؤولها ول س بآخرها(: هنا لد نا مثال ب انات احد الطالب وكان رقمه 36 ونر د إن نضعه ف القائمة حسب الرقم التسلسل ألرقام الطالب س كون الحل كما ل : Insert_l(node*f) وضع اىج ب بد داخو اىnode node*c,*p; إ شبء new node ث وضع اى ؤشش c c=getnode( ); c->info=30; قى ثىضع اى ؤشش p ف اىnode اىز ش ش إى هب اى f p=f; زز ز اىز قو ثبسزخذا اى ؤشش p ف اىقبئ خ ب سىه دو ض بعهب while(c->info > f->info && c->info > p->info) p=p->link; قى ث قو اى ؤشش p اى node اىز ش ش إى هب إى اى node اىز ري هب c->link=p->link; قى ثز ف زهب ثعذ رىقف wile طجعب وهزا اىسطش قى ثبىزبى : قى ثشثظ رساع اىnode اى شاد سثطهب ثبى node اىز ش ش إى هب p->link=c; رساع اى p قى ث قو رساع اى ؤشش p اىnode اىز مب ش ش إى هب إى اى nodeاىز ر سثطهب)اى( c هزا اىسطش قى ثبىزبى : طبى ب >f->info( )c->info عيى بد اىnode اىز ش ش إى هب اى ؤشش c امجش عيى بد اىnode اىز ش ش إى هب اى ؤشش)&&) f و c ش ش إى هب اى ؤشش اىز عيى بد اىnode )(c->info>p->linked->info ) عيى بد اى node اى شاد سثطهب ثبىقبئ خ( امجش عيى بد اى node اىز ش ش إى هب رساع اى ؤشش p 26

بعد هذا كله راح تكون القائمة بهذا الشكل: f p 20 30 35 40 c 36 27

2 0 f 3 0 3 5 4 0 رابعا : عمل ة ربط node ف أخر القائمة: لد نا هذه القائمة: c ونر د أن نربط ال node التال ة ف أخر القائمة: إزضبس 7 0 إ شبء Insert_l(node*f) وضع اىج ب بد داخو اىnode node*c; c=getnode( ); طبى ب رساع اىl ىخىدح c->info=70; l=f; while(l->link!=null) l=l->link; l->link=c; c->link=null; new node ث وضع قى ث قو اى ؤشش f اىnode اىز ش ش عي هب إى اىnode اىز ري هب إى إ صو إى أخش اىقبئ خ ( زز ش ش إى أخش node ف اىقبئ خ(ع ذ عذ رسقق اىششط قى ثشثظ رساع اى l اىز وصيذ إى أخش اىقبئ خ ث node اىز أ شئ هب قى ثشثظ رساع اىnode ثnull أل هب أخش node ف اىقبئ خ ث ع أخش إ رساع اىc ال رشرجظ ث node أخشي قى ثىضع اى ؤشش l ز ث ش ش اى ؤشش f وراىل زز ز اىز قو ثبسزخذا اى ؤشش l إى أخش اىقبئ خ وراىل رفبد ىعذ ض بع اىقبئ خ ز ث أرا ر قو اىع صش f نب خ ف أوه ع صش ف اىقبئ خ فئ ب سىف فقذ اىقبئ خ ثأم يهب وراىل خطأ فبدذ خذا. 28

29

******************************************************************************************** دالة تقوم بإضافة عنصر ف بد ة القائمة المتصلة: Node* AddItemFront(int x, Node *L) Node *P; P = new(node); P -> Data = x; P -> Next = L; L = P; return L; 31

دالة تقوم بإضافة عنصر ف نها ة القائمة المتصلة: Node* AddItemRear(int x, Node *L) Node *P, *Q; if (L = = NULL) Q = new(node); Q -> Data = x; Q -> Next = NULL; L = Q; P = L; while (P->Next!= NULL) P = P -> Next; Q = new(node); Q -> Data = x; Q -> Next = NULL; P -> Next = Q; return L; 31

دالة تقوم بالبحث عن أي عنصر داخل القائمة المتصلة : bool SearchItem(int x, Node *L) Node *P = L; if (P == NULL) return false; if (P -> Data == x) return true; return SearchItem(x, P -> Next); دالة تقوم بالحذف أي عنصر داخل القائمة المتصلة: Node* DeleteItem(int x, Node *L) Node *P = L, *Q; if (P -> Data == x) L = L ->Next; delete P; while ((P->Next)->Data!= x) P = P -> Next; Q = P -> Next; P -> Next = Q -> Next; delete Q; return L; 32

دالة تقوم بقلب عناصر القائمة المتصلة: Node* InvertList(Node *L) Node *P = L; Node *Q = NULL; Node *R; while (P!= NULL) R = new(node); R -> Data = P->Data ; R -> Next = Q; Q = R; P = P->Next; return Q; دالة تقوم بفرز القائمة المتصلة باستخدام طر قة الفرز الفقاع : Node* SortList(Node *L) Node *P; int np; int temp; do np = 0; P = L; while (P->Next!= NULL) if (P->Data > (P->Next)->Data) temp = P->Data; P->Data = (P->Next)->Data; (P->Next)->Data = temp; np++; P = P->Next; while (np > 0); return L; 33

دالة تقوم بتحو ل القائمة العاد ة الى قائمة دائر ة: Node* Circular(Node *L) Node *P; if (L!= NULL) P = L; while (P->Next!= NULL) P = P->Next; P -> Next = L; return L; دالة تقوم بطباعة جم ع عناصر القائمة الدائر ة: void PrintCircular(Node *Q) Node *P; if (Q!= NULL) cout<<q->data<<"\t"; P = Q->Next; while (P!= Q) cout<<p->data<<"\t"; P = P->Next; 34

القوائم المتصلة ذات االتجاه ن( lists :(Doubly-linked الشكل العام lists) :(Doubly-linked عند تعريف القائمة البد من اعالن عن مؤشر الى اول اقائمة ومؤشر نحو اخر القائمة مثل: struct Node Node *Prev; int D ata; Node *N ext; struct Dbl_list Node *F irst; Node *L ast; //**************************** برنامج قوم با ضافة عنصر ف بدا ة القائمة واضافة عنصر ف نها ة القائمة وعرض عناصر القائمة من االول الى االخ ر وعرض عناصر القائمة من االخ ر الى االول وحذف أي عنصر من القائمة: #include <iostream> using namespace std; struct Node 35

Node *Prev; int Data; Node *Next; ; struct Dbl_List Node *First; Node *Last; ; Dbl_List AddFront(int x, Dbl_List L) Node *P ; if (L.First == NULL) P = new(node); P->Prev = NULL; P->Data = x; P->Next = NULL; L.First = P; L.Last = P; P = new(node); P->Prev = NULL; P->Data = x; P->Next = L.First; L.First->Prev = P; L.First = P; return L; 36

Dbl_List AddRear(int x, Dbl_List L) Node *P ; if (L.First == NULL) P = new(node); P->Prev = NULL; P->Data = x; P->Next = NULL; L.First = P; L.Last = P; P = new(node); P->Prev = L.Last; P->Data = x; P->Next = NULL; L.Last->Next = P; L.Last = P; return L; void ShowListFarward(Dbl_List L) Node * P = L.First; while (P!= NULL) cout<<p->data<<"\t"; P = P->Next; 37

cout<<endl; void ShowListBackward(Dbl_List L) Node * P = L.Last; while (P!= NULL) cout<<p->data<<"\t"; P = P->Prev; cout<<endl; Dbl_List DeleteItem(int x, Dbl_List L) Node *P ; if (L.First->Data == x) P = L.First; L.First = L.First ->Next ; L.First ->Prev = NULL; delete P; if (L.Last->Data == x) P = L.Last; L.Last = L.Last ->Prev ; L.Last ->Next = NULL; delete P; 38

P = L.First; while((p!= NULL)&&(P->Data!= x)) P = P -> Next; if (P == NULL) cout<<"not Found.."<<endl; (P->Prev)->Next = P->Next; (P->Next)->Prev = P->Prev; delete P; return L; main() Dbl_List L; L.First = NULL; L.Last = NULL; L = AddFront(26,L); L = AddFront(16,L); L = AddRear(36,L); L = DeleteItem(26,L); ShowListFarward(L); 39

هاذا برنامج الستاك والك و والنكد لست ولكن با اكواد مختصرة لم نكتب جم ع االكواد ولكن كتبناء القل ل منهاء: #include<iostream.h> //******************************* const int size=5; //******************************* struct stack int top; int item[size]; int rear; int front; stack *First; stack *Last; stack *Prev; int Data; stack *Next; ps; //***************************** /*struct Dbl_List Node *First; Node *Last; ; //***************************** struct Node Node *Prev; int Data; Node *Next; ;*/ //***************************** void initial(struct stack *ps) ps->top=-1; ps->front=0; //front =Null; ps->rear=-1; //****************************** void push(struct stack *ps,int m) if(ps->top<(size-1)) (ps->top)++; ps->item[ps->top]=m; cout<<"full\n"; 41

//******************************** int insert ( stack*ps,int e ) if((ps->rear)>size) cout<<"the queue is full \n"; ps->rear=ps->rear+1; ps->item[ps->rear]=e; //**************************** void pop(struct stack *ps) if(ps->top>(-1)) cout<<ps->item[ps->top]<<endl; (ps->top)--; cout<<"empty\n"; //******************************** int delet( stack *ps) if(ps->rear < ps->front) cout<<"is empty \n"; return 0; return ps->item[ps->front++]; //********************************** void display( stack *ps) for(int i=ps->front;i<=ps->rear;i++) cout<<ps->item[i]<<endl; cout<<"\n****************\n"; //********************************** void sho( stack *ps) for(int i= 0;i<ps->top ;i++) cout<<ps->item[i]; cout<<"empty\n"; //********************************* stack AddFront(int x, stack L) stack *P ; if (L.First == NULL) P = new(stack); 41

P->Prev = NULL; P->Data = x; P->Next = NULL; L.First = P; L.Last = P; P = new(stack); P->Prev = NULL; P->Data = x; P->Next = L.First; L.First->Prev = P; L.First = P; return L; //********************************** stack AddRear(int x, stack L) stack *P ; if (L.First == NULL) P = new(stack); P->Prev = NULL; P->Data = x; P->Next = NULL; L.First = P; L.Last = P; P = new(stack); P->Prev = L.Last; P->Data = x; P->Next = NULL; L.Last->Next = P; L.Last = P; return L; //********************************** void ShowListFarward(stack L) 42

stack * P = L.First; while (P!= NULL) cout<<p->data<<"\t"; P = P->Next; cout<<endl; //*********************************** void ShowListBackward(stack L) stack * P = L.Last; while (P!= NULL) cout<<p->data<<"\t"; P = P->Prev; cout<<endl; //************************************ stack DeleteItem(int x, stack L) stack *P ; if (L.First->Data == x) P = L.First; L.First = L.First ->Next ; L.First ->Prev = NULL; delete P; if (L.Last->Data == x) P = L.Last; L.Last = L.Last ->Prev ; L.Last ->Next = NULL; delete P; P = L.First; while((p!= NULL)&&(P->Data!= x)) P = P -> Next; 43

if (P == NULL) cout<<"not Found.."<<endl; (P->Prev)->Next = P->Next; (P->Next)->Prev = P->Prev; delete P; return L; /*********************************** int SearchItem(int x, stack *L) cin>>x; stack *P = L; if (P == NULL) return false; if (P -> Data == x) return true; return SearchItem(x, P -> Next); */ //************************************ اىجىة ىع و شبثهخ اى ذخيخ اىع بصش ثقيت رقى داىخ// stack* InvertList(stack *L) stack *P = L; stack *Q = NULL; stack *R; while (P!= NULL) R = new(stack); R -> Data = P->Data ; R -> Next = Q; Q = R; P = P->Next; return Q; //************************************ int main() 44

stack L; L.First = NULL; L.Last = NULL; int n, op, x;; initial(&ps); do cout<<"\stack \n\n1 to push and \n2 to pop\n6show stacke\n\nqueue\n\n3 insert queue\n4 delete queue \n5 display queue\n \nsingl linked list\n\n7 add to front\n8 add to front\n9 ShowListFarward\n10 DeleteItem of linked list\n"; cin>>op; switch(op) case 1:; cin>>n; push(&ps,n); case 2: pop(&ps); case 3: cout<<"enter the number \n"; cin>>n; insert(&ps,n); case 4: cout<<"you delete value "<< delet(&ps)<<endl; case 5: display(&ps); case 6: sho(&ps); case 7: cout<<"pleas add 5 to front\n"; for(int i=0;i<=size;i++) x=i; cin>>x; //L.First = NULL; //L.Last = NULL; AddFront(x,L); case 8: 45

cout<<"pleas add 5 to Rear\n"; for(int i=0;i<=size;i++) x=i; cin>>x; AddRear( x,l); case 9: ShowListFarward(L); case 10: cout<<"enter the number delete of singel linked list\n"; cin>>x; DeleteItem(*&x,L); /*case 11: //cin>>x; I//nvertList(stack); */ default: cout<<"error"; while(op!=0); return 0; //*********************************** برنامج قوم باإلضافة ف البدا ة والنها ة وقبل أي رقم و قوم بعرض العمل ات المدخلة واالضافة بعد أي رقم والحذف من البدا ة والنها ة ومن الوسط والحذف من أي مكان وعرض العناصر المتصلة بعد عمل ة الحذف : #include<iostream.h> #include<conio.h> #include<alloc.h> struct dnode int data; struct dnode*llink,*rlink; ; struct dnode*f; dnode *intl() f=null; return f; 46

dnode*creatnode() return((dnode*)malloc(sizeof(dnode))); //********************************* void addbeg(dnode*&f,dnode*n) if(f==null) n->rlink=f; n->llink=null; f=n; n->rlink=f; n->llink=null; f->llink=n; f=n; void addend(dnode*f,dnode*n) dnode*p=null; p=f; while(p->rlink!=null) p=p->rlink; n->llink=p; n->rlink=null; p->rlink=n; void addaft(dnode*f,dnode*n,int e) dnode*p=null; p=f; while(p!=null&& p->data!=e) p=p->rlink; if(p==null) cout<<" \n data you want to add after it not found \n"; n->llink=p; n->rlink=p->rlink; 47

p->rlink->llink=n; p->rlink=n; void visilist(dnode*f) dnode*p=null; p=f; if(p==null) cout<<" \n there is no node in the list \n"; while(p!=null) cout<<p->data; p=p->rlink; void revlist(dnode*f) dnode*p=null; p=f; if(p==null) cout<<" \n there is no nodes in the list \n"; while(p->rlink!=null) p=p->rlink; while(p!=null) cout<<p->data; p=p->llink; //************************************ void addbef(dnode*f,dnode*n,int e) dnode*p=null; p=f; while( p!=null&&p->data!=e) p=p->rlink; if(p==null) cout<<"\n data you want add befor it not found \n"; 48

n->llink=p->llink; n->rlink=p; p->llink->rlink=n; p->llink=n; void dbeg(dnode*&f) dnode*d=null; d=f; f=f->rlink; f->llink=null; free(d); void dend(dnode*f) dnode*p=null; p=f; while(p->rlink!=null) p=p->rlink; p->llink->rlink=null; free(p); void dmid(dnode*f,int e) dnode*d=null; d=f; while(d->data!=e&& d->rlink!=null) d=d->rlink; if( d->rlink==null) cout<<" \n data that you want to delete it not found in midlist \n"; d->llink->rlink=d->rlink; d->rlink->llink=d->llink; free(d); void danywhere(dnode*&f,int key) dnode*d=null; dnode*pf=null; dnode*p=null; 49

p=f; d=f; pf=f; int found=0; while(d!=null&&!found) if(d->data==key) found=1; p=f; d=d->rlink; if(!found&&d==null) cout<<"\n node that you want to delete it not found \n"; if(found) if(pf==d) f=f->rlink; f->llink=null; free(d); d->llink->rlink=d->rlink; d->rlink->llink=d->llink; free(d); main() //clrscr(); dnode*f=intl(); dnode*n=null; int x; int op; do cout<<"\n enter 1 to addbegin and \n 2 to addend \n 3 to addaft \n 4 to display \n 5 to exit \n 6 to add befor specific data \n 51

7 to delete from begin \n 8 to delete from end\n 9 to delete from mid list \n 10 to delete any where \n 11 to show list from last \n"; cin>>op; switch(op) case 1: n=creatnode(); cout<<"enter information"; cin>>n->data; addbeg(f,n); case 2: n=creatnode(); cout<<"enter information"; cin>>n->data; addend(f,n); case 3: n=creatnode(); cout<<"enter data"; cin>>n->data; cout<<"enter data that you want to add after it"; cin>>x; addaft(f,n,x); case 4: visilist(f); case 6: int y; n=creatnode(); cout<<"enter information of node \n"; cin>>n->data; cout<<"enter data you want add befor it \n"; cin>>y; addbef(f,n,y); case 7: dbeg(f); case 8: dend(f); 51

case 9: int z; cout<<" \n enter data you wnat to delete from list \n "; cin>>z; dmid(f,z); case 10: int t; cout<<"\n enter data you want delete it \n"; cin>>t; danywhere(f,t); case 11: revlist(f); while(op!=5); //*************************************** برنامج قوم بعمل ة االضافة ف البدا ة والنها ة وقبل أي رقم و قوم بالعرض و قوم بعمل ة االضافة بعد أي رقم والحذف من البدا ة والنها ة والوسط وترت ب العناصر وتقس م القائمة وا جاد مجموع االعداد الزوج ة والفرد ة: #include<iostream.h> //using namespace std; #include<conio.h> #include<alloc.h> struct sll int data; struct sll*llink; ; sll*f; sll*creatnode() return((sll*)malloc(sizeof(sll))); sll*intl() f=null; return f; void addbeg(sll*&f,sll*n) 52

n->llink=f; f=n; void addend(sll*f,sll*n) sll*p=null; p=f; while(p->llink!=null) p=p->llink; p->llink=n; n->llink=null; void addaft(sll*f,sll*n,int e) sll*p=null; p=f; while(p->data!=e&&p!=null) p=p->llink; if(p!=null) n->llink=p->llink; p->llink=n; cout<<"the node you want to add after it not found \n"; void visitlist(sll*f) sll*p=null; p=f; while(p!=null) cout<<p->data; p=p->llink; void addbef(sll*f,sll*n,int e) sll*p=null; sll*old=null; p=f; while(p->data!=e&&p!=null) old=p; p=p->llink; if(p!=null) n->llink=p; old->llink=n; cout<<"the node you want to add befor it not found \n"; void dbeg(sll*&f) 53

sll*d=null; d=f; f=f->llink; free(d); void dend(sll*f) sll*p=null; sll*d=null; p=f; while(p->llink!=null) d=p; p=p->llink; d->llink=null; void dlend(sll*f) sll*d; sll*p; d=f; p=f; while(p->llink!=null) d=p; p=p->llink; d->llink=null; free(p); void dmid(sll*f,int key) sll*p=null; sll*d=null; p=f; while(p->llink->data!=key&&p!=null) p=p->llink; d=p->llink; if(p!=null) p->llink=d->llink; cout<<"\n data you want to delete it not found \n"; //******************** void odev(sll*&f,sll*n) sll*p=f; if(n->data%2==0) n->llink=f; f=n; if(f==null) 54

n->llink=f; f=n; p=f; while(p->llink!=null) p=p->llink; n->llink=null; p->llink=n; p=n; //******************************** void div_list(sll*f,int e) sll*p=null; sll*p2=null; sll*f2=null; p=f; while(p->data!=e) p=p->llink; f2=p->llink; p2=p->llink; p->llink=null; cout<<"\n first list \n"; p=f; while(p!=null) cout<<p->data; p=p->llink; cout<<"\n second list is \n"; p2=f2; while(p2!=null) cout<<p2->data; p2=p2->llink; //************************ void findsum(sll*f) sll*p=null; p=f; int sumeven=0; int sumodd=0; while(p!=null) if(p->data%2==0) sumeven=sumeven+p->data; sumodd=sumodd+p->data; p=p->llink; cout<<"the sum of even number is \n"<<sumeven<<endl; 55

cout<<"the sum of odd number is \n"<<sumodd<<endl; //************************** void rev_list(sll*&f) sll*pre=null; sll*current=null; sll*next=null; current=f; pre=null; while(current!=null) next=current->llink; current->llink=pre; pre=current; current=next; f=pre; //************************ main() //clrscr(); int x; sll*f,*n=null; f=intl(); int op; do cout<<"\n enter 1 to addbegin \n 2 to add after specific data \n 3 to add end \n 4 to display list \n 5 to exit \n 6 to add befor specific node \n 7 delete from begin \n 8 delete from end \n 9 delete from midlist \n 10 to orderlist \n 11 to split list \n 12 to find sum of odd and even number \n 13 to revers list \n 14 delet in end\n"; cin>>op; switch(op) case 1: n=creatnode(); cout<<"enter information"; cin>>n->data; addbeg(f,n); case 2: n=creatnode(); cout<<"enter information"; cin>>n->data; cout<<"enter data you want to add after it \n"; cin>>x; addaft(f,n,x); case 3: n=creatnode(); cout<<"enter information"; cin>>n->data; addend(f,n); case 4: 56

cout<<"\n @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"; visitlist(f); case 6: int y; n=creatnode(); cout<<"enter information of node"; cin>>n->data; cout<<"enter data you want to add befor it \n"; cin>>y; addbef(f,n,y); case 7: dbeg(f); case 8: dend(f); case 9: int k; cout<<"enter data you want to delete it from midlist"; cin>>k; dmid(f,k); case 10: n=creatnode(); cout<<"enter information"; cin>>n->data; odev(f,n); case 11: int e; cout<<"enter data you want to split list from it \n"; cin>>e; div_list(f,e); case 12: findsum(f); case 13: rev_list(f); case 14: dlend(f); while(op!=5); 57

اعداد الطالب : عبد الرحمن ح ى محمد صلح جامعة صنعاء كل ة الحاسوب وتكنولوج ا المعلومات مستوى ثان )Information System( قسم نظم معلومات تم جمع االفكار و الدروس واألغلب من محاضرة من بعض المواقع ومن عدة كتب د/ فضل باعلوي أ /هبة أ/ مروة الهادي ف حالة وجود ان تبلغون اتمنى خطؤ أي ف اسرع وقت ممكن للتواصل على البر د اإللكترون 700hnoon@gmail.com او على الف س بوك http://www.facebook.com/hnoon2015 عبد الرحمن ح صلح 58