مساوی قرار دادن دو استراکت با هم .(از نوع لینکد لیست) - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۱۵۶ نفر آنلاین
۰ عضو و ۱۵۶ مهمان در سایت حاضرند

مساوی قرار دادن دو استراکت با هم .(از نوع لینکد لیست)

0 امتیاز
68 بازدید

دوستان من میخام این دوتا استراکت و مساوی هم قرار بدم ، هردو تقریبا یه نوع هستند ، و از نوع اشاره گر هم هستند، پس چرا مساوی هم قرار نمیگیرند؟

#include "stdafx.h"
#include <iostream>
using namespace std;
struct linkedlisttt
{
	int data;
	struct linkedlistt *badi;
};
struct linkedlist
{
	int data;
	struct linkedlist *badi;
};
int main()
{
	struct linkedlist *sar;
	struct linkedlistt *sar1 ;
	sar = new linkedlist;
	sar->data= 14;
	sar->badi = new linkedlist; 
	sar->badi->data = 23;
	sar->badi->badi = new linkedlist;
	sar->badi->badi->data = 98;
	sar->badi->badi->badi=NULL;
	 
	///injaaa

	sar1 = sar;
	   
	///injaaa
	system("pause");
};

 

سوال شده شهریور 5, 1393  بوسیله ی hosseinam1370 (امتیاز 208)   3 29
یه مشکل توی خط ۴ هست . که اسم ساختار یک t اضافه داره .
توی خط ۲۸ هم فقط با یک Cast اون ۲ تا رو بهم تبدیل کنید .
;sar1 = (linkedlistt*) sar
سی++ داره از قوانین پایه خودش استفاده میکنه ، خیلی باحاله.
شبیه
int a, b;         l
int taqsim = (float) a/b;                l
هست.

بازم ممنون از شما.

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

اسم استراکت اول linkedlisttt هست نه linkedlistt  چندجا اشتباه نوشتید

داخل ++C نباید برای تعریف متغیر قبلش struct گذاشت  درست نیست

بدلیل این کدتون ارور میده که  2 تا struct کاملا متفاوت ساختید برای هر لینک لیست .

2 تا struct متفاوت رو نمیشه در حالت معمولی با هم مساوی گذاشت یا مثل سوال قبلیتون هر 2تا لینک لیست رو از یک struct بسازید یا کست کنید 

یا یک تابع جدا برای deep copy  تعریف کنید داخل 2 تا لیست برید جلو و دیتا ها رو کپی کنید 

به این شکل مثلا :

#include <iostream>

struct linkedlisttt
{
	int data;
     linkedlisttt *badi;

};
struct linkedlist
{
	int data;
     linkedlist *badi;

};

//paksazi linklist
void clear(linkedlisttt* head){
	while (head != NULL){
		linkedlisttt* temp = head->badi;
		delete head;
		head = temp;
	}
}

//copy  az src be dst
void deep_copy(linkedlist* src, linkedlisttt** dst)
{
	clear(*dst);
	linkedlisttt** dst_ptr = dst;

	if (src != NULL){
		*dst = new linkedlisttt;
		(*dst)->data = src->data;
		dst_ptr= dst;
		dst_ptr = &(*dst_ptr)->badi;
		src = src->badi;
	}
	else return;

	while (src != NULL)
	{
		(*dst_ptr) = new linkedlisttt;
		(*dst_ptr)->data = src->data;
		dst_ptr = &(*dst_ptr)->badi;
		src = src->badi;
	}
	(*dst_ptr) = NULL;
}

int main()
{
     linkedlist *sar=NULL;
     linkedlisttt *sar1=NULL;
	sar = new linkedlist;
	sar->data = 14;
	sar->badi = new linkedlist;
	sar->badi->data = 23;
	sar->badi->badi = new linkedlist;
	sar->badi->badi->data = 98;
	sar->badi->badi->badi = NULL;

	///injaaa

	deep_copy(sar, &sar1);
	std::cout << sar1->badi->badi->data;
	///injaaa
	system("pause");
};

 

 

پاسخ داده شده شهریور 5, 1393 بوسیله ی BlueBlade (امتیاز 15,742)   13 17 85
حق با شماست که نباید struct و تو سی ++ گزاشت ،ولی گزاشتن struct به خانایی برنامه کمک میکنه و تازه منم دیگه عادت کردم ،ولی بیشتر بخاطر خانایی خودم هست.

شما کپی را با تابع انجام دادید ،با کامپایل کردن کدتون ، دیدم که نحوه ی کارش با این خط فرقی نداره :
sar1 = (linkedlistt*)sar;
 
ممنون دوسته عزیز از وقتی که گذاشتی.
نه توی کدی که گذاشتید فرقی نداره ولی اگر محتوای  داخل دو structمتفاوت بود کست درست کار نمی کرد من حالت کلی تر رو گفتم.
در مورد struct هم به خوانایی کمک خاصی نمی کنه برای کد ++C عجیب هم هست ایرادی هم که داره اینه که اگر اسم اشتباه استفاده  کنید کامپایلر بهتون خطا نمیده مثلا اگر توی کد اول که گذاشتید اگر struct نمیزاشتید قسمت هایی که t کم گذاشته بودید بهتون ارور میداد
آها .آره فهمیدم ، میسی.
...