آژانس هواپیماییexchanging

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

شروع موضوع توسط oranoos_mta ‏11 ژانویه 2008 در انجمن خانواده C++ , C

  1. oranoos_mta

    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;
    }
    
     
  2. oranoos_mta

    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  است . از هیچ گره ی اضافی استفاده نکنید  . زمان اجرای این الگوریتم را حساب کنید.
    
     
  3. oranoos_mta

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