واضح آرشیو وب فارسی:سایت ریسک: خيلي حياتيه خواهشن کمک کنيد (ساختمان داده در ++c) oranoos_mta 20 دي 1386, 23:30فرض کنید 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 "; 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 21 دي 1386, 00:123) سوال بعدی اینه که من نسخه غیر بازگشتیه تابع 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 "; 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 "; 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; } emad_67 22 دي 1386, 15:50سوالت رو از داخل کد ها بیار بیرون تا بشه فهمید چی نوشتی oranoos_mta 26 دي 1386, 11:21اتفاقا سوالمو از رو کدها میتونید جواب بدید فقط چند تا تغییر باید بدید کد رو که من نمیدونم کجاشو باید تغییر بدم کمکم کنید راستی اگه الگوریتم جعبه لایتنر رو هم داشتی بزار خیلی حیاتیه
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1406]