• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

کمک کنيد (ساختمان داده در ++c)

oranoos_mta

Registered User
تاریخ عضویت
22 آپریل 2007
نوشته‌ها
1,144
لایک‌ها
33
HTML:
6)	این سوال هم فکر کنم بتونید کمکم کنید
الگوریتمی برای حذف کوچکترین عضو در min heap البته من الگوریتم در max heap شو میزارم شاید کمک کنه
void element delete-max-heap(int*n)
{
	int parent,child;
	element temp,item;
	if(heap-empty(*n))
	{
		cout<<"tree is empty\n";
		exit(1);
	}
	item=heap[1];
	temp=heap[(*n)--];
	parent=1;
	child=2;
	while(child<=*n)
	{
		if((child<=*n)&&(heap[child].key<heap[child+1].key))
			child++;
		if(temp.key>=heap[child].key)
			break;
		heap[parent]=heap[child];
		child*=2;
	}
	heap[parent]=temp;
	return item;
}
 

oranoos_mta

Registered User
تاریخ عضویت
22 آپریل 2007
نوشته‌ها
1,144
لایک‌ها
33
HTML:
	فرض کنید        x=(x_1,x_2,…,x_n)و   y=(y_1,y_2,…,y_m )   دو لیست پیوندی هستند . الگوریتمی برای ادغام این دو لیست بنویسید تا اگر m<=n باشد لیست پیوندی
  z=(x_1,y_1,x_2,y_2,…,x_m  ,y_m  ,x_(m+1),…,x_n)    بدست آید و اگر m>n باشد 
  z=(x_1,y_1,x_2,y_2,…,x_n  ,y_n  ,x_(n+1),…,y_m )  بدست آید.
پس از ادغام  دو لیست x و y  باید لیستهای خالی را نشان دهند زیرا هر گره ی اولیه در  x  و  y  اکنون در  z  است . از هیچ گره ی اضافی استفاده نکنید  . زمان اجرای این الگوریتم را حساب کنید.

List-pointr merge(list-pointer ptr1,list-pointer ptr2)
{
	List-pointer  temp;
	Temp=(list-pointer ) new (sizeof(list-node));
	If(is-full(temp))
	{
		Cout<<"memory is full\n";
		Exit(1);
	}
	Int i ;
	If( m <= n )
	 {
		For(temp=ptr1 ; temp -> link ; temp=temp -> link )
		 {
			Temp -> link = ptr2 ;
			i += 1;
			If ( I == m)
			  Break;
		 }
	While ( i != n )  {
		Temp -> link = ptr2;
		i += 1;
	}
	if( m > n )
	{
خوب به نظر شما این تابع همون کارو میکنه یا نه کلا تابع غلطه کمکم کنید

	فرض کنید        x=(x_1,x_2,…,x_n)و   y=(y_1,y_2,…,y_m )   دو لیست پیوندی هستند . فرض کنید در هر لیست پیوندی ‘ گره ها به ترتیب غیر نزولی مقادی فیلد data شان قرار گرفته اند.الگوریتمی برای ادغام این دو لیست بنویسید تا لیست پیوندی جدید z  تولید کند که در آن گره ها نیز به همین ترتیب هستند . پس از ادغام  دو لیست x و y  باید لیستهای خالی را نشان دهند زیرا هر گره ی اولیه در  x  و  y  اکنون در  z  است . از هیچ گره ی اضافی استفاده نکنید  . زمان اجرای این الگوریتم را حساب کنید.
 

oranoos_mta

Registered User
تاریخ عضویت
22 آپریل 2007
نوشته‌ها
1,144
لایک‌ها
33
HTML:
3)	سوال بعدی اینه که من نسخه غیر بازگشتیه تابع preorder() یک درخت را نوشتم درخواستم از شما اینه که چطور میشه نسخه غیر بازگشتیه تابع postorder() را بنویسم.
اینم کد نسخه غیر بازگشتیه preorder() 
void tree::preorder(tree node *s)
{
	tree node=*p=root;
	do{
		while(p != null)
		{
			cout<<p -> data;
			s.push(p);
			p=p->left;
			if(!(s-empty())
			{
				p=s.pop();
				p=p->right;
			}
		}while(!(s.empty()) || p != null)
	}
}
4)	الگوریتمی به نام swaptree() که یک درخت دودویی دریافت و جای بچه های چپ و راست هر گره را عوض کند

5)	این سوال هم فکر نکنم زیاد سخت باشه 
الگوریتمی برای اضافه کردن یک عضو در min heap البته من الگوریتم در max heap شو میزارم شاید بدرد خورد
void insert-max-heap(element item,int *n)
{
	int i;
	if(heap-full(*n)
	{
		cout<<"tree is full\n";
		exit(1);
	}
	i=++(*n);
	while((i!=1)&&(item.key>heap[i/2].key))
	{
		heap[i]=heap[i/2];
		i/=2;
	}
	heap[i]=item;
}
 
بالا