نمایش نتایج 1 تا 3 از 3

نام تاپیک: پیاده سازی Queue (صف) به صورت سی ++ در سی شارپ

  1. #1

    پیاده سازی Queue (صف) به صورت سی ++ در سی شارپ

    سلام دوستان

    میشه لطفا یکی بگه مشکل این کد چیه؟

    تو سی ++ مینویسم کاملا درسته ولی تو سی شارپ به Front و Rear و مهم تر از همه به node گیر میده و زیر هرچی node هست حتی وقت تعریف ساختمان قرمز میکنه.


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;
    namespace Queue
    {
    public partial class Form1 : Form
    {

    struct node
    {
    public int value;
    public string text;
    public node* next;
    }

    node* front = null;
    node* rear = null;

    public Form1()
    {
    InitializeComponent();
    }

    private void addq(int value,string text)
    {
    node* q = new node();

    q->value = value;
    q->text = text;
    q->next = null;

    if (rear == null)
    {
    rear = q;
    front = q;
    }
    else
    {
    rear->next = q;
    rear = q;
    }
    }
    }
    }



    ارورشم اینه

    Pointers and fixed size buffers may only be used in an unsafe context


    برنامم قراره شماره و نام اشخاص رو بگیره و در صف قرار بده و بعدا طبق صف یکی یکی نمایش و حذفشون کنه.
    روش های دیگم دیدم اما توشون فقط عدد و بعدی رو میگرفت و نمیشد رشته هم تعریف کرد.

    روش های زیر رو تست کردم ولی فقط عدد میگیرن و یه مشکل دیگه دارن که مثه روش بالا حالت ساختمان مانندی ندارن و تو سرچ کاربر اذیت میشه چون بالا وقت پیمایش تا به آیتم مورد نظر برسه فقط لازمه Text رو چاپ کرد.

    Queue<int> q = new Queue<int>();

    یا

    ArrayList lst = new ArrayList();



    لطفا راهنماییم کنین.

    ممنونم
    آخرین ویرایش به وسیله ali.khoban : جمعه 20 بهمن 1391 در 05:54 صبح

  2. #2
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    اصفهان
    پست
    1,436

    نقل قول: پیاده سازی Queue (صف) به صورت سی ++ در سی شارپ

    دوست عزیز در #C به طور پیشفرض امکان استفاده از pointer ها نیست.شما فقط میتونید در بلاک هایی که با unsafe مشخص میکنید از pointer استفاده کنید.MSDN
    بجای استفاده از pointer و پیاده سازی صف، همون کلاس Queue که گفتین مناسب هست.منتها فقط عدد نمیگیره.کلاس Queue یک کلاس Generic هست. یعنی شما موقع تعریف بر اساس Type ی که مشخص میکنید یک صف از اون نوع درست میکنید.

    struct Student
    {
    public int value;
    public string text;
    }
    ..
    ..
    Queue<Student> studentQueue = new Queue<Student>();

    با متد Enqueue میتونید یک شی رو به انتهای صف اضافه کرد و با Dequeue شی از ابتدای صف برداشت.

    Student student = new Student();
    student.value = 2;
    student.Text = "Hello!";
    studentQueue.Enqueue(student);
    ..
    ..
    Student output = studentQueue.Dequeue();
    MessageBox.Show(output.Text);

    و البته از اونجا که Queue از نوع IEnumerable هست، متدهای زیادی رو برای فیلتر(Where) و پیمایش و انتخاب آیتم و... به شما میده.اصلا نیازی به پیاده سازی دوباره صف ندارین.

  3. #3

    نقل قول: پیاده سازی Queue (صف) به صورت سی ++ در سی شارپ

    اصلا چرا صف؟!! نوع استفاده شما چیه که میخوای از صف استفاده کنی؟ صرفا ذخیره و جستجو، در اینصورت استفاده از صف اشتباهست؟
    اگر بین استفاده از Queue و ArrayList مردد هستی یعنی دنبال راه بهتری هستی ، بهتره برای این کار بی خیال هر دو بشی و به جاش از List استفاده کنی:

    class node
    {
    public int value;
    public string text;
    }

    List<node> students = new List<node>();


    مثال برای اضافه کردن:

    node student1 = new node() { text = "a", value = 100 };
    students.Add(student1);

    node student2 = new node() { text = "b", value = 200 };
    students.Add(student2);


    از طریق اندیس میتونی به اطلاعات دسترسی داشته باشی:
    students[0].text


    برای جستجو از طریق text هم به طریق زیر عمل کن. text که دنبالش هستی رو در textForFind بریز و از طریق متد find پیداش کن و بعد ازش استفاده کن:

    string textForFind = "a";
    node result = students.Find(delegate(node n)
    {
    if (n.text == textForFind)
    return true;
    else
    return false;
    }
    );

    if (result != null)
    {
    // use result
    MessageBox.Show("node found. value is : " + result.value + " index is :" + students.IndexOf(result));
    }


    میتونی از طریق متدهای students حذف و اضافه و ... در لیست رو انجام بدی.

تاپیک های مشابه

  1. پاسخ: 3
    آخرین پست: چهارشنبه 22 آذر 1391, 11:21 صبح
  2. سوال: سورس یک برنامه ساده که به صورت موازی پیاده سازی شده
    نوشته شده توسط safatx در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 0
    آخرین پست: شنبه 28 مرداد 1391, 01:09 صبح
  3. سوال: پیاده سازی فضای مساله به صورت درخت با استفاده تابع بازگشتی
    نوشته شده توسط zt1990 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 2
    آخرین پست: چهارشنبه 14 تیر 1391, 08:57 صبح
  4. پاسخ: 2
    آخرین پست: چهارشنبه 13 اردیبهشت 1391, 09:20 صبح
  5. پاسخ: 2
    آخرین پست: جمعه 01 خرداد 1388, 17:56 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •