خيلي حياتيه خواهشن کمک کنيد (ساختمان داده در ++c)

oranoos_mta

New Member
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

New Member
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;
}


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

New Member
اتفاقا سوالمو از رو کدها میتونید جواب بدید فقط چند تا تغییر باید بدید کد رو که من نمیدونم کجاشو باید تغییر بدم کمکم کنید
راستی اگه الگوریتم جعبه لایتنر رو هم داشتی بزار خیلی حیاتیه
 

جدیدترین ارسال ها

بالا