تالار گفتمان مانشت

نسخه‌ی کامل: کمک فوری در لیست های پیوندی یک طرفه
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3
سلام-دوستان من تابع اضافه کردن به لیست پیوندی یک طرفه را در زبان سی پلاس پلاس به این صورت میخوام1
الف)اضافه کردن به ابتدا لیست
ب)اضافه کردن به انتهای لیست
ج)اضافه کردن به وسط لیست
فرض میکنیم ابتدای لیستsنام دارد و انتها ان q
استاد ما یه جور میگه که من متوجه نمیشم اگه امکان داره اینا رو با توضیح کامل به من بدید ممنون از راهنماییتان
ببین من خودم متوجه نمیشدم اما کتاب ساختمان داده جعفر نژاد از لحاظ کد نویسی مطالب بهتر گفته و خوب هم توضیح داده فقط کامل مطالب رو بیان نکرده حالا دقت کن ...من با کمی توضیح برات قرار میدم
فرض کن گره ای مثل d را به ابتدای لیست می خواهیم اضافه کنیم حالا فیلد آدرس آن باید به ابتدای لیست اشاره کند و سپس اشاره گری که قبلا به ابتدای لیست اشاهره میکرد به گره جدید اشهره نماید دستورات این عمل به صورت زیر در کتاب مذکور بیان شده است
کد:
d= new node;
d->info=400;
d->next=p;
p=d;
توضیح کد خط ها :
خط اول : این کد خط توسط تابع new گره ای به نام d را ایجاد میکند
خط دوم : قسمت info در این گره مقدار ۴۰۰ را به خود میگیرد
خط سوم : اشاره گر p به ابتدای لیست اشاره دارد حال فیلد آدرس d به اشاره گر اول لیست اشاره می کند
خط چهارم : حال جایی که p اشاره می کند d هم اشاره می کند

اگه این قسمت رو فهمیدی بگو تا ادامه بدم
سلام-ممنون تا اینجا مشکلی نیست ادامه بدید!

اگه میشه تابع ان هم بنویسید و توضیح بدید شرمنده

شرمنده من خط اخرو متوجه نمیشم p=d یعنی چی جای که Dاشاره میکنه Pهم اشاره میکنه مگهDگره نیست اما Pاشاره گره؟میشه با رسم شکل توضیح بدید!من گره و اشاره گر ها رو قاطی کردم شرمنده!
(27 اردیبهشت 1391 11:25 ق.ظ)sajad2020 نوشته شده توسط: [ -> ]شرمنده من خط اخرو متوجه نمیشم p=d یعنی چی جای که Dاشاره میکنه Pهم اشاره میکنه مگهDگره نیست اما Pاشاره گره؟میشه با رسم شکل توضیح بدید!من گره و اشاره گر ها رو قاطی کردم شرمنده!
شرمنده فعلا باید برم شرکت سر کار امشب کامل با شکل برات میگم
موفق باشی
ببین دوست من

با کد ;p= new node میشه شکل اول یعنی گره جدید ایجاد میشه که اشاره گر p به اون اشاره میکنه(شکل ۱)

با کد ;p->info=5 مقدار ۵ در قسمت data گره قرار میگیرد

اما کد ;p->next=first این یعنی اشاره گر گره یعنی p->next به همون جایی اشاره کند که اشاره گر first اشاره می کند (شکل ۲)

فهم این کد ; first=p سخت نیست یعنی اینکه اشاره گر p به هر جا اشاره دارد اشاره گر first به همون جا اشاره کند (شکل ۳)

حالا تابع میشه این (یادم نمیاد از کدوم کتاب یا سایت یادداشت کردم):

کد:
void InsertFirst( ItemType Item)
{
   NodePtr Current;
   Current = new Node;
   if (current == NULL)
      {
      cerr << "Memory allocation error!" << endl;
      exit(1);
      }
   current->Next = Front;
   current->Info = item;
   Front = current;
   if (Count == 0)
      Rear = current;
   Count++;
}

اگه کامل فهمیدی بگو تا ادامه بدم
سلام دوست عزیز-اضافه کردن به وسط و انتهای لیست چطوریه؟

ببین استاد ما تابع رو یه جور دیگه مینویسه من فردا شب مینویسم برای شما تا شما تحلیل کنید ممنون
کد:
newp=new node;
newp -> info=22;
newp -> next =p -> next;
p -> next =newp;
newp=new node : این کد خط گره جدید ایجاد می کند که newp به آن اشاره میکند

newp -> info=22 : قسمت داده در گره مقدار 22 را میگیرد

بقیه کد ها را روی شکل برات تعریف کردم .
کد هایی که استادت بهت داده رو برام پیام بزن تا برا تحلیل کنم .
اینو فهمیدی بریم سراغ آخری Smile
ممنون-بریم سراغ اخری؟کدهای استادمو فردا شب برات پیام میدم
رو شکل برات دارم قرار میدم چند دقیقه صبر کن
ببین نمیخواد تا پیدا کردن گره قبل از ان گره جدید و جستجو کنیم؟
(29 اردیبهشت 1391 02:32 ب.ظ)sajad2020 نوشته شده توسط: [ -> ]ببین نمیخواد تا پیدا کردن گره قبل از ان گره جدید و جستجو کنیم؟
چرا باید این کار رو حتما بکنی تا اشتره گر رو به قبل اون گره جدید برسونی از طریق کد زیر :
ptr=ptr -> next این کد را ادامه می دهیم تا اشاره گر ptr را به محل درست برسانیم :

راستی این کد پیمایش لیست هستش :

کد:
ptr=first;
while (ptr!=null)
{
process(ptr -> info)
ptr=ptr -> next ;
{
این کد پیمایش لیست هست تا به null که آخر لیست رو نشون میده

این کد ها بیشتر فکر کنم از روی کتاب داده جعفر نژاد برداشتم
این کدprocess(ptr -> info)چیه/بدیش اینه استاد ما جعفر نژاد رو قبول نداره اصلا کد هاش فرق دارن!
(29 اردیبهشت 1391 02:54 ب.ظ)sajad2020 نوشته شده توسط: [ -> ]این کدprocess(ptr -> info)چیه/بدیش اینه استاد ما جعفر نژاد رو قبول نداره اصلا کد هاش فرق دارن!
ببین این کد پردازش گره هستش منم خیلی کتاباش خوشم نمیاد حالا بخشی از بعضی کتاباش خوبه قانع نشدی دکمه قانع نیست رو بزن
(29 اردیبهشت 1391 03:02 ب.ظ)yaser_ilam_com نوشته شده توسط: [ -> ]
(29 اردیبهشت 1391 02:54 ب.ظ)sajad2020 نوشته شده توسط: [ -> ]این کدprocess(ptr -> info)چیه/بدیش اینه استاد ما جعفر نژاد رو قبول نداره اصلا کد هاش فرق دارن!
ببین این کد پردازش گره هستش منم خیلی کتاباش خوشم نمیاد حالا بخشی از بعضی کتاباش خوبه قانع نشدی دکمه قانع نیست رو بزن
ببین دوست من به زبان ساده process ، یه تابع هستش که قسمت داده (info) گره رو پردازش میکنه یعنی شما میتونی تابع process رو جداگانه بنویسی و هر عملی که خواستی روی داده موجود در گره انجام بدی مثلا شاید بخوای مقدار 5 رو به هر کدام از گره ها اضافه کنی حال با استفاده از تابع process می تونی اینکار رو بصورت زیر انجام بدی .
کد:
int process(int x)
{
int t=5,y;
y=t+x;
return y;
}
سلام-دوست عزیز اینم تابع حذف یک گره از انتهای لیست که استاد ما گفته منم میخوام شما اضافه کردن را اینطوری بنویسید!

void delete (node*s)
{if(s==null)cout<<"invalid delete";return;}
if(s->next==null){delet(s);s=null;}
else
{
node*p=s;
while(p->next->next!=null)
p=p->next;
delet(p->next);
p->next=null;
}

در مورد سوال قبل sابتدای لیست, pانتهای لیست میباشد
صفحه‌ها: 1 2 3
لینک مرجع