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

مساعدة في هياكل البيانات

بدأه ماريا اسلام في 26 أبريل 2009 · 5 رد · 1,242 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته 

المادة التي اريد المساعدة فيها تدعى هياكل البيانات واريد ان تساعدوني إن سمحتم  في الآتي :

** ايجاد اكبر واصغر رقم في المكدسات ونبادل بين مواقعهم 

** بحث عن القيمة في مكدس عن طرق الموقع index وليس القيمة 

وجزاكم الله خيراً ودمتم في رعاية الله..

منتظرة مساعدتكم !!

ربي هذا العهد لك ... عزم القلب الوفا

#2

السلام عليكم

المكدس اساسا يبنى على المصفوفات

شوفى الكود التالى لتعرفى كيف يتم البحث عن أكبر وأصغر قيمه والتبديل بينهم (swap)

#include <iostream>
using namespace std;
void swap_big_small(int arr[],int top)
{
	int big=arr[0],small=arr[0];
	int i_big=0,i_small=0,i;
	int temp;
	for ( i=0;i<top;i++)
	{
		if(arr>big)
		{big=arr;i_big=i;}

		if(arr<small)
		{small=arr;i_small=i;}
	}
	cout<<"the big = "<<big<<endl;
	cout<<" the small = "<<small<<endl;
	// swap
	temp=arr[i_small];
	arr[i_small]=arr[i_big];
	arr[i_big]=temp;
}
int main()
{
	int arr[8]={4,5,2,1,7,4,9,3};
	swap_big_small(arr,8);
	for(int i=0;i<8;i++)
		cout<<arr<<"  ";
	cout<<endl;
	return 0;
}

ويمكنك تطبيق الفكره على المكدس

بالنسبه للثانى

يمكنك استخدام for loop يبدأ من الصفر حتى اقل من قيمة المؤشر top

واستخدام جملة if داخل اللوب

جربى وان شاء الله توفقى

سلام

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#3

يا اخي اشكرك على التفاعل ولكن هذه العمليات باستخدام المصفوفة سهلة وانا لا اريد كتابتها بالمصفوفات ثم أن المكدس بالتأكيد يرتكز على اساس المصفوفات ولكن هذا لا يعني انه يمكن الحل بسهوله فهناك اختلاف كبير بينهما ..

وجزاك الله خيراورزقك من حوله وقوته

ربي هذا العهد لك ... عزم القلب الوفا

#4

السلام عليكم

المكدس إما أن يبنى بالمصفوفات وإما بالقوائم المتصله linked lists

فلو تم بناؤه بالمصفوفات يمكن تطبيق ما سبق عليه بسهوله

على اعتبار انه فى اى لحظه يكون المكدس مصفوفه عدد عناصرها top+1

أما لو بنى بالقوائم فهنا يجب استخدام المؤشرات يعنى شغل تانى

ممكن نشوف المكدس التى تريدى العمل عليه

تحياتى

سلام

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#5
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>

class element   
{
public:
int value;
element* next;
};//class element

class stack 
{
public:
int size;
element* current;

stack()
{
  size=0;
  current=NULL;
}//default constructor

bool push(int,element*);
bool pop();
bool isEmpty();
int getStackSize();
void printStackSize();
void printStackElements(element*);
void printStackMenu();
void Serch_Index(element*);
void Min_Max_Swap(element*);
};

bool stack::push(int ele,element* temp)
{
	temp=new element;
	if(current==NULL)
	{
		temp->next=NULL;
	}
	else
	{
		temp->next=current;
	}
	temp->value=ele;
	current=temp;
	printf("%d inserted\n\n",ele);
	size++;
	return false;
}

bool stack::pop()
{
	if(isEmpty())
	{
	cout<<"\nStack is Empty\n";	  
	return false;
	}
	else
	{
	cout<<"\n Element To POP :"<<current->value;
	cout<<"\n Before POP";
	printStackElements(current);
	current=current->next;
	cout<<"\n After POP";
	printStackElements(current);
	size=size--;
	}
	return true;
}

bool stack::isEmpty()
{
	if(getStackSize()==0)
	return true;

	return false;
}

int stack::getStackSize()
{
return size;
}//returns size of the stack

void stack::printStackSize()
{
cout<<"\nThe Size of the Stack:"<<size<<"\n";
}//print the stack size

void stack::printStackElements(element* base)
{
	 	element* curr2;
		curr2= base;
		cout<<"\n-----\n";
		cout<<"STACK\n";
		cout<<"-----\n";
		while(curr2!=NULL)
		{
			cout<<" |"<<curr2->value<<"|\n";
			curr2=curr2->next;
		}
}// print the stack

void stack::printStackMenu()
{
cout<<"Welcome to Stack \n";
cout<<"1.Push an element\n";
cout<<"2.Pop an element\n";
cout<<"3.Display Stack\n";
cout<<"4.Size Of Stack\n";
cout<<"5.Swap(Max-Min) Value\n";
cout<<"6.Serch by Index\n";
cout<<"7.Exit\n";
}




void stack::Min_Max_Swap(element* base)
{
	 	element* curr2;
		int Max=0,Min;
		int CountMax=0,CountMin=0;
		int IndexMax=0,IndexMin=0;
		curr2= base;
//Max
		while(curr2!=NULL)
		{
			CountMax++;
			if(Max<=curr2->value)
			{
			Max=curr2->value;
			IndexMax=CountMax;
			}
			curr2=curr2->next;
		}
//Min
		curr2= base;
		if(curr2!=NULL)
		{
			CountMin++;
			Min=curr2->value;
			IndexMin=CountMin;
			curr2=curr2->next;
		}
		while(curr2!=NULL)
		{
			CountMin++;
			if(Min>=curr2->value)
			{
			Min=curr2->value;
			IndexMin=CountMin;
			}
			curr2=curr2->next;
		}

//Swaping
		int i=1;
		curr2= base;
		if(curr2!=NULL)
		{
		while(curr2!=NULL && i!=IndexMax)
		{
			curr2=curr2->next;
			i++;
		}
		curr2->value=Min;
		}

		i=1;
		curr2= base;
		if(curr2!=NULL)
		{
		while(curr2!=NULL && i!=IndexMin)
		{
			curr2=curr2->next;
			i++;
		}
		curr2->value=Max;
		}

}
void stack::Serch_Index(element* base)
{
	 	element* curr2;
		curr2= base;
		int Count=0;
		int index;
		bool Found=false;
		int Value;
		cout<<"Enter your Index Value:"<<endl;
		cin>>index;
		if(curr2!=NULL)
		{
		while(curr2!=NULL && Found ==false)
		{
			Count++;
			if(Count==index)
			{
				Value=curr2->value;
				Found=true;
			}

			curr2=curr2->next;

		}
		if(Found==true)

		cout<<"Value:"<<Value<<endl;

		else
			cout<<"Not Found"<<endl;
		}

}

void main()
{
stack st;
char Option=0;
int val;
	while(1)
	{
		st.printStackMenu();
		cin>>Option;
			switch(Option)
			{
			case '1':
					cout<<"Enter a Number \n";
					cin>>val;
					st.push(val,st.current);
					break;
			case '2':
					st.pop();
					break;

			case '3':
					st.printStackElements(st.current);
					break;

			case '4':
					st.printStackSize();

					break;
			case '5':
					st.Min_Max_Swap(st.current);
					break;
			case '6':
					st.Serch_Index(st.current);
					break;
			case '7':
					exit(0);
					break;


			}
	}
}
llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#6

اشكرك جزيل الشكر أخي aminولكن نحن لم نأخذ تمثيل المكدس بالقوائم المتصلة أما بالنسبة للحل السابق مصفوفي بحت واشتغلت عليه بطريقة أخرى والحمدلله

واكرر شكري مرة أخرى

وجزاك الله خيرا ورزقك من حوله وقوته

بالنسبة للأخ time

شكراً جزيلاً على تفاعلك فقد أفادني برنامجك في بعض الجوانب ولا أظنه يستحق كل هذا الطول

والله ولي التوفيق.. 

ربي هذا العهد لك ... عزم القلب الوفا

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