PDA

View Full Version : سوال: لینک لیست ها



hafez1
چهارشنبه 13 اردیبهشت 1391, 23:53 عصر
اگه یه نود داشته باشم که مشخصات یه استاد توش باشه حالا بخام یه استاد جدید بش اضافه کنم (به اول لیست ) این کد درسته؟؟؟؟



head=&newprof
newprof.next=prof.back

حالا اگه بخایم یه استادی رو حذف کنیم بنا به این که ممکنه اول یا وسط یا آخر لیست باشه کدش چی جوری می شه.
من زیاد توی حذف و اضافه کردن node وارد نیستم.مثلا کی می نویسیم newprof.next و کی می نویسیم newprof->next اگه می شه برام توضیح بدین.

hafez1
پنج شنبه 14 اردیبهشت 1391, 00:18 صبح
اگه بخام با همین لینک لیستا استادی رو پیدا کنم تابع search چی جوری می شه؟؟

BORHAN TEC
پنج شنبه 14 اردیبهشت 1391, 01:42 صبح
چرا از گوگل استفاده نمی کنی؟:متفکر:
به نظر من اگه مقاله زیر رو بخونی همه چیز دستگیرت میشه:
http://www.codeproject.com/Articles/24684/How-to-create-Linked-list-using-C-C

one hacker alone
پنج شنبه 14 اردیبهشت 1391, 12:15 عصر
سلام دوست عزیز کد کامل رو بزار

hafez1
پنج شنبه 14 اردیبهشت 1391, 12:48 عصر
#include<iostream>
#include <fstream>
#include<stdio.h>
#include<string.h>
using namespace std;
struct prof
{
char firstname[34];
char lastname[20];
char position;
int personalCod;
int groupdepartmentNumber;
prof *next;
prof *privew;
prof *temp;
};
int main()
{
head=&newprof
newprof.next=prof

Ananas
پنج شنبه 14 اردیبهشت 1391, 15:53 عصر
سلام.
تابع main رو باید تغییر بدی. این یک نمونه :

int main()
{
prof *head = new prof;
head->next = new prof;
prof head2;
head->privew = &head2;
}

hafez1
پنج شنبه 14 اردیبهشت 1391, 19:38 عصر
با توجه به جواب بالا اطلاعات استاد از قبیل نام و فامیل و کد پرسنلی و... هم به لینک لیست اضافه میشه؟؟؟؟؟؟؟؟؟

کامروا
پنج شنبه 14 اردیبهشت 1391, 19:59 عصر
حذف از لیست غیر حلقوی :


اگر نود اول نباشه :

if ( Current != first_ )
{
Current->prev_ = first_;.
Current->prev_->next_ = Current->next_;
}
else
{
first_ = Current->next_;
if ( first_ != NULL )
first_->prev_ = NULL;
}

اگر نود آخر نباشه :
if ( Current->next_ != NULL )
Current->next_ = Current->prev_;

else if ( Current->prev_ != NULL )
Current->prev_->next_ = NULL;

BeginnerProgrammer
پنج شنبه 14 اردیبهشت 1391, 20:27 عصر
اگه insert و بهتره عنوان یک تابع بنویسید خیلی مناسبتره ، و استفاده از یه کلاسی مثل کلاس زیر خیلی کارتونو راحتر میکنه:


struct prof
{
char firstname[34];
char lastname[20];
char position;
int personalCod;
int groupdepartmentNumber;
};
class professor{
public:
void insert();
void Add(prof p);
void del();
prof *next;
prof *prev;
prof *first;
};

اینجوری خیلی راحت تره مثلا تابع add اینجوری میشه :


first.prev=new prof;
first.prev=p;
p.next=first;
first=p;

تابع حذفشم از کدی که دوستان نوشتن میتونید استفاده کنید.


با توجه به جواب بالا اطلاعات استاد از قبیل نام و فامیل و کد پرسنلی و... هم به لینک لیست اضافه میشه؟؟؟؟؟؟؟؟؟

وقتی دارین یه استراکتو به اولین نود(یا هر جایه دیگه ) اضافه میکنید این استراکت شامل تمام اطلاعاته مربوط به استاد پس همه ی این اطلاعاتم تو همون یک نمونه ای که دارین اضافه میکنید وجود داره و به لیست اضافه میشه!

hafez1
پنج شنبه 14 اردیبهشت 1391, 21:59 عصر
ببخشید کار تابع insert این جا چیه؟؟؟؟؟؟؟

BeginnerProgrammer
پنج شنبه 14 اردیبهشت 1391, 22:12 عصر
این تابع برای درست کردن لیست اولیه س . ولی میتونید یه جورایی با add ادغامش کنید( این دیگه ابتکاریه، اصلاً کار سختیم نیست ) ولی این راه حل معمولشه.