Bài tập 41

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Bài tập 41

Bài gửi  root on Thu Feb 10, 2011 2:38 am

Bài 41.
Sử dụng Mảng để cài đặt danh sách liên kết.
Xây dựng các phép toán sau:
http://1.Khởi tạo làm rỗng danh sách
http://2.Kiểm tra danh sách rỗng
http://3.Khởi tạo một node
http://4.Phần tử đầu tiên của danh sách
http://5.Lấy nội dung của nút p trong danh sách
http://6.Phần tử cuối của danh sách
http://7.Phần tử kế tiếp
http://8.In danh sách
http://9.Tính độ dài danh sách
http://10.Chèn node vào đầu danh sách
http://11.Chèn node vào cuối danh sách
http://12.Chèn node sau node p đã có trong danh sách
//13.Định vị của node có giá trị x. trả về position
http://14.Xóa phần tử đầu tiên của danh sách
http://15.Xóa một phần tử sau phần tử p của danh sách
http://16.Xóa phần tử cuối cùng của danh sách
//17. Tìm một phần tử có giá trị x trong danh sách
//18.Đếm số lần xuất hiện của phần tử x
http://19.Tính tổng các phần tử trong danh sách
//20. Xóa bỏ các phần tử bị trùng trong danh sách
//21. Sắp xếp danh sách theo thứ tự tăng dần
//22. Sắp xếp danh sách theo thứ tự giảm dần
//23. Tìm giá trị của phần tử lớn nhất
//24. Tìm giá trị của phần tử nhỏ nhất
//25. Tìm vị trí để xen phần tử vào danh sách thứ tự
//26. Thêm một phần tử vào danh sách có thứ tự
//27. Đếm số lần xuất hiện của phần tử x trong danh sách có thứ tự
//28. Tách ds ra thành 2 ds. 1 chẵn và 1 lẻ
//29. Trộn 2 ds có thứ tự thành một ds mới có thứ tự tăng
//30. Kiểm tra danh sách liên kết có tạo thành cấp số cộng không
//31. Liệt kê giá trị các phần tử là các số nguyên tố trong danh sách
//32. Ham tra ve Node truoc Node co noi dung X
//33. Tạo danh sách là giao của 2 ds
//34. Tạo danh sách là hợp của 2 ds
//35. Xóa tất cả các phần tử trong danh sách
//36. Nối 2 danh sách
//37. Hàm tách một danh sách liên kết ra làm hai, ngắt ở giữa. Nếu chiều dài của danh sách là lẻ thì danh sách thứ nhất sẽ dài hơn danh sách thứ hai một phần tử.
//37. Lấy giá trị đầu tiên của phần tử đầu trong danh sách
//38. Lấy giá trị đầu tiên của phần tử cuối trong danh sách
//40. Tính tích các phần tử trong danh sách

root
Admin

Tổng số bài gửi : 37
Join date : 03/01/2011
Age : 30
Đến từ : An Giang

Xem lý lịch thành viên http://www.huynhhai.co.cc

Về Đầu Trang Go down

Help!!! Cách chèn ảnh vào bài viết

Bài gửi  LoveIT on Tue Feb 15, 2011 4:47 pm

Có pro nào biết cách chèn ảnh vào bài viết hok?
bài DSLK đã làm xong mà không biết chèn ảnh vào bài viết.
Xin chỉ dẫn cụ thể dùm. Thank trước nha! Sad

LoveIT

Tổng số bài gửi : 15
Join date : 16/01/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

BÀI 41: Danh sách liên kết cài đặt bằng mảng

Bài gửi  LoveIT on Wed Feb 16, 2011 5:57 am

BÀI 41: Danh sách liên kết cài đặt bằng mảng



Source Code (full).
xong bài này tui giải nghệ luôn.




Code:
using System;



class LIST
{
    int[] element;        //gia tri
    int last;              //chieu dai ds
    const int max = 100;    //ds chua toi da 100 ptu

    //contructor khoi tao ds chua toi da 100 ptu
    public LIST()
    {
        element = new int[max];
    }
   
    // 1.Khởi tạo làm rỗng danh sách
    public void MakeNull()
    {
        last = 0;
    }
   
    // 2.Kiểm tra danh sách rỗng
    public bool IsEmpty()
    {
        return last == 0;
    }
    // 3.Khởi tạo một node(không hiểu)

    //kiểm tra danh sách đầy
    public bool IsFull()
    {
        return last == max;
    }
   
    // 4.Phần tử đầu tiên của danh sách
    public int First()
    {
        return 1;
    }
   
    // 5.Lấy nội dung của nút p trong danh sách
    public int ValueOfp(int p)
    {
        if (p < 1 || p > last + 1)
            Console.WriteLine("vi tri khong hop le!");
        return element[p - 1];
    }
   
    // 6.Phần tử cuối của danh sách
    public int End()
    {
        return (last + 1);
    }

    // 7.Phần tử kế tiếp
    public int Next(int p)
    {
        if (p < 1 || p > last + 1)
            Console.WriteLine("vi tri khong hop le!");
        return p + 1;
    }
   
    //nhập danh sách
    public void Scanf()
    { 
        Random ran=new Random();
        int X;                  //phần tử cần thêm
        Console.Write("Nhap vao so phan tu: ");
        int n = int.Parse(Console.ReadLine());
        for (int i = 1; i <= n; i++)
        {
            X = ran.Next(20);//ngẫu nhiên giá trị X từ 0 - 19
            Insert(X, End());
        }
    }
   
    // 8.Duyệt danh sách
    public void Printf()
    {
        int p = First();
        while (p != End())
        {
            Console.Write(ValueOfp(p) + "\t");
            p = Next(p);
        }
    }
   
    // 9.Tính độ dài danh sách
    public int Length()
    {
        return last;
    }

    //chèn X vào vị trí p (hàm này hổ trợ cho các hàm chèn khác)
    public void Insert(int value, int p)
    {
        if (IsFull())
            Console.WriteLine("Danh sach day!");
        else
            if (p < 1 || p > last + 1)
                Console.WriteLine("Vi tri khong hop le");
            else
            {
                //dich chuyen phan tu sang phai 1 vi tri
                for (int j = last - 1; j > p - 1; j--)
                    element[j] = element[j - 1];
                element[p - 1] = value;
                last++;
            }
    }

    // 10.Chèn node vào đầu danh sách
    public void InsertFirst(int X)
    {
        HelpInsert(X, First());//nếu dùng hàm Insert(X, First()) sẽ bị lỗi khi in ra thiếu phần tử cuối
    }

    http://11.Chèn node vào cuối danh sách
    public void InsertEnd(int X)
    {
        Insert(X, End());
    }
   
    http://12.Chèn node sau node p đã có trong danh sách
    public void InsertAfter(int X,int p)
    {
        Insert(X,Next(p));
    }
 
    //13.Định vị của node có giá trị x đầu tiên trong danh sách. trả về position
    public int Locate(int X)
    {
        int p;
        //nút p luôn bắt đầu = 1
        for (p = 1; p < last + 1; p++)
        {
            if (ValueOfp(p) == X)
                return p; //tìm thấy tại nút p
        }
        return 0;  //không tìm thấy
    }
   
    http://14.Xóa phần tử đầu tiên của danh sách
    public void DelFirst()
    {
        Del(First());
    }

    http://15.Xóa một phần tử sau phần tử p của danh sách
    // vị trí xóa bắt đầu từ 1
    public void Del(int p)
    {
        if (p < 1 || p > last)
            Console.WriteLine("Vi tri khong hop le");
        else
            if (IsEmpty())
                Console.WriteLine("Danh sach rong! khong the xoa");
            else
            {
                for (int q = p - 1; q <= last - 1; q++)//nguyên gốc q < last - 1
                    element[q] = element[q + 1];
                last--;
            }
    }

    http://16.Xóa phần tử cuối cùng của danh sách
    public void DelEnd()
    {
        Del(last);
    }

    //17. Tìm một phần tử có giá trị x trong danh sách
    public bool Search(int X, LIST l)
    {
        for (int i = 0; i <= l.last - 1; i++)
        {
            if (l.element[i] == X)
                return true;//tìm thấy X
        }
        return false;//không thấy X
    }
   
    //18.Đếm số lần xuất hiện của phần tử x
    public int CountX(int X)
    {
        int count = 0;
        int P = First();
        while (P != End())
        {
            if (ValueOfp(P) == X)
                count++;
            P = Next(P);
        }
        return count;
    }

    http://19.Tính tổng các phần tử trong danh sách
    public int SumListMem()
    {
        int Sum = 0;
        for (int i = 0; i <= last-1 ; i++)
            Sum += element[i];
        return Sum;
    }
    /*
    * 20. Xóa bỏ các phần tử bị trùng trong danh sách
    trừ phần tử đầu tiên.
    * sử dụng cho hàm 34. Tạo danh sách là hợp của 2 ds
    */
    public void DelMemSame(int X)
    {
        int p = Next(Locate(X));
        while (p != End())
        {
            if (ValueOfp(p) == X)
                Del(p);
            else
                p = Next(p);
        }
    }
   
    //21. Sắp xếp danh sách theo thứ tự tăng dần
    public void SortInc()
    {
        for(int i = 0; i < last - 1; i++)
            for(int j = i + 1; j < last; j++)
                if (element[j] < element[i])
                {
                    int tam = element[i];
                    element[i] = element[j];
                    element[j] = tam;
                }
    }
   
    //22. Sắp xếp danh sách theo thứ tự giảm dần
    public void SortDec()
    {
        for (int i = 0; i < last - 1; i++)
            for (int j = i + 1; j < last; j++)
                if (element[j] > element[i])
                {
                    int tam = element[i];
                    element[i] = element[j];
                    element[j] = tam;
                }
    }
   
    //23. Tìm giá trị của phần tử lớn nhất
    public int MaxValue()
    {
        int max = element[0];
        // i bắt đầu từ vị trí thứ 2
        for (int i = 1; i < last; i++)
        {
            if (element[i] > max)
                max = element[i];
        }
        return max;
    }
   
    //24. Tìm giá trị của phần tử nhỏ nhất
    public int MinValue()
    {
        int min = element[0];
        // i bắt đầu từ vị trí thứ 2
        for (int i = 1; i < last; i++)
        {
            if (element[i] < min)
                min = element[i];
        }
        return min;
    }
    /*
      25. Tìm vị trí để xen phần tử X vào danh sách thứ tự
          vị trí cần chèn ngay trước phần tử X
    */
    public int LocateInsert(int X)
    {
        int p = First();
        while(p != End())
        {
            if (ValueOfp(p) <= X)
                p = Next(p);
            else return p;
        }
        return p ; 
    }
    /*   
    hàm này dùng cho việc: chèn thêm giá trị X vào vị trí nút p trong List đã có phần tử (nhưng không phải là phần tử cuối).
    áp dụng cho hàm 26. Thêm một phần tử vào danh sách có thứ tự
    */
    /*
    * không hiểu sao trong C mình áp dụng hàm Insert (X, LocateInsert(X)) thì đúng.
    * Nhưng trong C# khi in ra nó lại in thiếu phần tử cuối cùng.
    * nên mới thiết kế thêm hàm  HelpInsert(int X,int p) để đảm bảo kết quả đúng
    *
    */
    public void HelpInsert(int X, int p)
    {
        if (IsFull())
            Console.WriteLine("Danh sach day!");
        else
            if (p < 1 || p > last + 1)
                Console.WriteLine("Vi tri khong hop le");
            else
            {
                int tam = element[last - 1];//lưu trữ phần tử cuối cùng trong List để tránh mất dữ liệu
                //dich chuyen phan tu sang phai 1 vi tri
                for (int j = last - 1; j > p - 1; j--)
                    element[j] = element[j - 1];
                element[p - 1] = X;//chèn X vào
                element[last] = tam;//chèn phần tử cuối cùng vào
                last++;
            }
    }

    //26. Thêm một phần tử vào danh sách có thứ tự
    public void InsertInc(int X)
    {
        HelpInsert(X, LocateInsert(X));
    }

    /*27. Đếm số lần xuất hiện của phần tử x trong danh sách có thứ tự 
    * hình như hàm này bị trùng thì phải.
    * hàm  "18.Đếm số lần xuất hiện của phần tử x "
    * đã thực hiện chức năng tương tự.
    * nên có lẻ không cần thiết phải đếm phần tử trong ds có thứ tự */
    /* không biết suy nghĩ vậy có đúng không nữa. Hay tại mình chưa hiểu ý của thầy (^-^) */

    //28. Tách ds ra thành 2 ds. 1 chẵn và 1 lẻ
    public void Tach2List(LIST Source, LIST Chang, LIST Le)
    { 
        for (int i = 0; i <= Source.last - 1; i++)
        {
            //mảng số chẳng
            if (Source.element[i] % 2 == 0)
            {
                Chang.element[Chang.last] = Source.element[i];
                Chang.last++;
            }
            //mảng số lẻ
            else
            {
                Le.element[Le.last] = Source.element[i];
                Le.last++;
            }
        }
    }
   
    //29. Trộn 2 ds có thứ tự thành một ds mới có thứ tự tăng
    public void Tron2List(LIST result,LIST ds1, LIST ds2)
    {
        /*
        * chú ý ds1 và ds2 phải là ds có thứ tự (ở đây là tăng).
        */
        int lower = 0, left = 0, right = 0;       
        int mid = ds1.last - 1;
        int upper = ds2.last - 1;
        /*
      *  lower là chỉ số đầu tiên của ds1.
      *  left là biến chạy (để duyệt ds1)
      *  right biến chạy (để duyệt ds2).
      *  mid là chỉ số sau cùng của ds1
      *  upper là chỉ số sau cùng của ds2.
        *
        * có thể minh họa như sau:
        *
        ds l1:  1  3  5  7  9  11
                  ^              ^
                  |              |
                left            mid
        *      lower
        *
        *  ds l2:      13  14  15  16  17  25
        *              ^                        ^
        *              |                        |
        *            right                    upper
     
        *  kết quả:  1  3  5  7  9  11  13  14  15  16  17  25
        *            ^              ^  ^                        ^
        *            |              |  |                        |
        *          lower            mid right                  upper
      */
        //sắp sếp tăng
        ds1.SortInc();
        ds2.SortInc();

        for (result.last = lower; (left <= mid) && (right <= upper); result.last++)
        {
            if (ds1.element[left] <= ds2.element[right])
                result.element[result.last] = ds1.element[left++];
            else
                result.element[result.last] = ds2.element[right++];
        }
        //copy những phần tử còn lại của 2 danh sách chưa copy xong vào ds result
        //copy danh sách thứ 1
        while (left <= mid)
            result.element[result.last++] = ds1.element[left++];
        //copy danh sách thứ 2
        while (right <= upper)
            result.element[result.last++] = ds2.element[right++];
    }

    //30. Kiểm tra danh sách liên kết có tạo thành cấp số cộng không
    public bool IsCapSoCong()
    {
        /*công thức truy hồi cấp số cộng: Un = U1 + (n - 1) * d.
        dùng d = element[1] - element[0] như thế này, mục đích để giảm việc gọi hàm.
        có thể use: d = ValueOfP ( Next (First() ) ) - ValueOfP ( First() )
        */
        int d = element[1] - element[0];
        //bắt đầu từ phần tử thứ 3
        for (int i = 3; i < last; i++)
        {         
          if (element[i - 1] != element[0] + (i - 1) * d)
              return false;
        }
        return true;
    }
   
    // ham kiem tra so nguyen to
    public bool IsNgTo(int x)
    {
        if (x < 2)
            return false; //x Không là số nguyên tố
        for (int i = 2; i <= Math.Sqrt(x); i++)
            //Nếu x chia hết cho bất kỳ số nào từ 2 đến căn bậc 2 của x
            //thì x không là số nguyên tố
            if (x % i == 0)
                return false; //x Không là số nguyên tố
        return true; //x là số nguyên tố
    }
   
    //31. Liệt kê giá trị các phần tử là các số nguyên tố trong danh sách
    public void PrintfNgTo()
    {
        for (int i = 0; i <= last - 1; i++)
        {
            if (IsNgTo(element[i]))
                Console.Write(element[i] + "\t");             
        }
       
        Console.WriteLine();
    }

    //32. Ham tra ve Node truoc Node co noi dung X
    public int PreValueNode(int X)
    {
        int p = Locate(X) - 1;
        return p;
    }

    //xóa các phần tử bị trùng trong ds
    public void XoaTrungList()
    {
        for (int k = 0; k <= last - 1; k++)
            if (CountX(element[k]) > 1)
                DelMemSame(element[k]);
    }

    //33. Tạo danh sách là giao của 2 ds
    /*ví dụ:
        ds1:    1  3  2  4  6
        ds2:    3  4  2  5  9
    *
    kết quả:  3  2  4
    */
    public void Giao2List(LIST resuilt,LIST l1, LIST l2)
    {
        //duyệt ds1
        for (int i = 0; i <= l1.last - 1; i++)
        {
            //nếu phần tử X=element[i] trong ds l1 có trong l2
            if (Search(l1.element[i],l2))
            {
                //copy phần tử X trong ds1 vào danh sách resuilt
                resuilt.element[resuilt.last] = l1.element[i];
                resuilt.last++; //tăng last để lưu trử phần tử kế
            }
        }
        //nếu ds1 có phần tử trùng
        //xóa các phần tử trùng trong ds resuilt
        resuilt.XoaTrungList();   
    }

    //34. Tạo danh sách là hợp của 2 ds
    /*
    ví dụ:
        ds1:    1  3  2  4  6
        ds2:    3  2  4  5  9  8
     
    kết quả:  1  3  2  4  5  6  9
    */
    public void Hop2List(LIST resuilt,LIST l1, LIST l2)
    {
        Noi2List(resuilt,l1, l2);
        //xóa các phần tử trùng trong ds resuilt
        resuilt.XoaTrungList();  //tại đây là nguyên nhân gây nên lỗi tràn mảng.
    }

    //35. Xóa tất cả các phần tử trong danh sách
    public void DelList()
    {
        int length = last;//mục đích để cho chương trình chạy đúng không bị ảnh hưởng bởi last-- trong vòng for
        //có thể gọi hàm Length() cũng được
        for (int i = 0; i <= length - 1; i++)
        {
            element[i] = 0;
            last--;
        }
    }

    //36. Nối 2 danh sách

    /*ví dụ :
    ds1:  1  3  4  5  6  8
    ds2:  3  5  7  9  11
    kết quả:    1  3  4  5  6  8  3  5  7  9  11
    * dùng cho hàm hợp 2 ds
    * Cần lưu ý: nếu số phần tử của l1 + số phần tử của l2 = max.
    * thì sau khi hợp sẽ xảy ra lỗi tràn mảng. mặc dù danh sách resuilt trong hàm "Noi2List" vẫn chứa đủ max phần tử.
    * Giải pháp: các bạn tự suy nghĩ (nhớ nên dùng Debug thì mới kiểm tra được lí do tại sao)
    */
    public void Noi2List(LIST resuilt,LIST l1, LIST l2)
    {
        //bắt lỗi trong trường hợp ds resuilt không đủ để chứa các phần tử of ds l1 và ds l2
        try
        {
            //duyệt ds l1
            for (int i = 0; i <= l1.last - 1; i++)
            {
                resuilt.element[resuilt.last] = l1.element[i];//copy vào ds resuilt
                resuilt.last++; //tăng last để lưu phần tử kế
            }
            //duyệt ds l2
            for (int j = 0; j <= l2.last - 1; j++)
            {
                resuilt.element[resuilt.last] = l2.element[j];//copy vào ds resuilt
                resuilt.last++; //tăng last để lưu phần tử kế
            }
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    /*37. Hàm tách một danh sách liên kết ra làm hai, ngắt ở giữa.
    * Nếu chiều dài của danh sách là lẻ thì danh sách thứ nhất sẽ dài hơn danh sách thứ hai một phần tử.*/
    public void Tach2Phan(LIST Source, LIST Desk1, LIST Desk2)
    {
        int mid = Source.last / 2;//vị trí giữa ds
        // chiều dài của danh sách là lẻ
        if (Source.last % 2 != 0)
        {
            /*
            danh sách thứ 1 sẽ dài hơn danh sách thứ hai một phần tử
            các bạn vẽ hình minh họa sẽ dể hiểu hơn.
            ds thứ 1
            */
            for (int i = 0; i < mid + 1; i++)
            {
                Desk1.element[Desk1.last] = Source.element[i];
                Desk1.last++;
            }
            //ds thứ 2
            for (int i = mid + 1; i <= Source.last - 1; i++)
            {
                Desk2.element[Desk2.last] = Source.element[i];
                Desk2.last++;
            }
        }
        // chiều dài của danh sách là chẳng
        else
        {
            /*
            chiều dài 2 ds = nhau
            ds thứ 1.
            các bạn vẽ hình minh họa sẽ dể hiểu hơn
            */
            for (int i = 0; i < mid ; i++)
            {
                Desk1.element[Desk1.last] = Source.element[i];
                Desk1.last++;
            }
            //ds thứ 2
            for (int i = mid; i <= Source.last - 1; i++)
            {
                Desk2.element[Desk2.last] = Source.element[i];
                Desk2.last++;
            }
        }
    }

    //38. Lấy giá trị đầu tiên của phần tử đầu trong danh sách
    public int FirstValue()
    {
        return ValueOfp(First());
    }
   
    //39. Lấy giá trị đầu tiên của phần tử cuối trong danh sách
    public int EndValue()
    {
        return ValueOfp(last);
    }

    //40. Tính tích các phần tử trong danh sách
    public double TichList()
    {
        double Tich = 1;
        for (int i = 0; i <= last - 1; i++)
            Tich *= element[i];
        return Tich;
    }
}

/*
 * CHÚ Ý: Để hiểu được các hàm do những người khác viết (các hàm khó) các bạn nên sử dụng công cụ
 * DEBUG (gỡ rối) trong VS C#.
 */
class Program

    static void Main()
    {
        LIST l  = new LIST();
        LIST l1 = new LIST();
        LIST l2 = new LIST();
        LIST l3 = new LIST();
        LIST l4 = new LIST();
        LIST l5 = new LIST();
       
        /*
        thực chất chúng ta chỉ cần khai báo 3 đối tượng là đủ rồi
        nhưng ở đây tôi làm như vậy. Đố các bạn biết...?
        */
        try
        {
            int chon;
            do
            {
                Console.WriteLine("CHUONG TRINH CAI DAT DANH SACH LIEN KET BANG MANG");
                Console.WriteLine("\n");
                Console.WriteLine("1: NHAP NGAU NHIEN DANH SACH VA DUYET DANH SACH");
                Console.WriteLine("2: XUAT RA CAC SO NGUYEN TO TRONG DANH SACH");
                Console.WriteLine("3: TINH TONG, TICH, MAX, MIN CUA DANH SACH");
                Console.WriteLine("4: KIEM TRA DANH SACH CO PHAI LA 1 DAY CAP SO CONG");           
                Console.WriteLine("5: TACH DANH SACH THANH 2 PHAN (NGAT O GIUA)");
                Console.WriteLine("6: TACH DANH SACH THANH 2 PHAN (1 CHANG, 1 LE)");
                Console.WriteLine("7: TRON 2 DANH SACH THANH 1 DANH SACH CO THU TU");
                Console.WriteLine("8: GIAO 2 DANH SACH");
                Console.WriteLine("9: HOP 2 DANH SACH");
                Console.WriteLine("10: CAC PHEP TOAN LIEN QUAN DEN CHEN");
                Console.WriteLine("0: THOAT CHUONG TRINH");
                Console.Write("Ban chon chuc nang nao: ");
                chon = int.Parse(Console.ReadLine());
                switch (chon)
                {
                    case 1:
                        {
                            Console.WriteLine(" \nNHAP NGAU NHIEN DANH SACH VA DUYET DANH SACH\n");
                            l.Scanf();
                            Console.WriteLine(" Gia tri: \n");
                            l.Printf();
                            Console.WriteLine("\n");
                            //xóa danh sách                 
                            l.DelList();
                            break;
                        }
                   
                    case 2:
                        {
                            Console.WriteLine(" \nXUAT RA CAC SO NGUYEN TO TRONG DANH SACH");                       
                            l.Scanf();
                            Console.WriteLine("Gia tri: \n");
                            l.Printf();
                            Console.WriteLine("\nCac so nguyen to: \n");
                            l.PrintfNgTo();
                            //xóa danh sách                 
                            l.DelList();
                            Console.WriteLine("\n");
                            break;
                        }
                    case 3:
                        {
                            Console.WriteLine(" \nTINH TONG, TICH, MAX, MIN CUA DANH SACH \n");
                            l.Scanf();
                            Console.WriteLine("Gia tri: \n");
                            l.Printf();
                            Console.WriteLine("\n");
                            Console.WriteLine("\nTong: {0} \t tich: {1}\t Max: {2}\t Min: {3}", l.SumListMem(), l.TichList(),l.MaxValue(),l.MinValue());
                            Console.WriteLine("\n");                           
                            //xóa danh sách                                 
                            l.DelList();
                            break;
                        }
                    case 4:
                        {
                            Console.WriteLine(" \nKIEM TRA DANH SACH CO PHAI LA 1 DAY CAP SO CONG\n");
                            l.Scanf();
                            Console.WriteLine("Gia tri: \n");
                            l.Printf();

                            if (l.Length() <= 2)
                                Console.WriteLine("khong the kiem tra duoc. ds phai co >= 3 phan tu .");
                            else
                            {
                                if (l.IsCapSoCong())
                                    Console.WriteLine("\nDanh sach da cho la 1 day cap so cong");
                                else
                                    Console.WriteLine("\nDanh sach da cho khong la 1 day cap so cong");                             
                            }
                            Console.WriteLine("\n");
                            l.DelList();
                            break;
                        }
                   
                    case 5:
                        {
                            Console.WriteLine("\n TACH DANH SACH THANH 2 PHAN (NGAT O GIUA)\n");
                            l.Scanf();
                            Console.WriteLine("\nDanh sach sau khi nhap: ");
                            l.Printf();
                            l.Tach2Phan(l, l1, l2);

                            Console.WriteLine("\nDanh sach l1: \n");
                            l1.Printf();
                            Console.WriteLine("\nDanh sach l2: \n");
                            l2.Printf();
                            //xóa các danh sách
                            l1.DelList();
                            l2.DelList();
                            l.DelList();
                            Console.WriteLine("\n");
                            break;
                        }
                    case 6:
                        {
                            Console.WriteLine(" \nTACH DANH SACH THANH 2 PHAN (1 CHANG, 1 LE) \n");
                            l.Scanf();
                            Console.WriteLine("Danh sach sau khi nhap: \n");
                            l.Printf();
                            l.Tach2List(l, l1, l2);
                            Console.WriteLine("\nDanh sach chang: \n");
                            l1.Printf();
                            Console.WriteLine("\nDanh sach le: \n");
                            l2.Printf();
                            //xóa các danh sách
                            l1.DelList();
                            l2.DelList();
                            l.DelList();
                            Console.WriteLine("\n");
                            break;
                        }
                    case 7:
                        {
                            Console.WriteLine(" \nTRON 2 DANH SACH THANH 1 DANH SACH CO THU TU \n");
                            Console.WriteLine("Nhap ngau nhien danh sach l1:");
                            l1.Scanf();
                            Console.WriteLine("Danh sach l1: \n");
                            l1.Printf();
                         
                            Console.WriteLine("\nNhap ngau nhien danh sach l2:");
                            l2.Scanf();
                            Console.WriteLine("Danh sach l2: \n");
                            l2.Printf();
                           
                            l3.Tron2List(l3, l1, l2);
                            Console.WriteLine("\nDanh sach sau khi tron tang: \n");
                            l3.Printf();
                            //xóa các danh sách
                            l1.DelList();
                            l2.DelList();
                            l3.DelList();
                            Console.WriteLine("\n");
                            break;
                        }
                    case 8:
                        {
                            Console.WriteLine(" \nGIAO 2 DANH SACH\n");
                            l1.Scanf();
                            Console.WriteLine("Danh sach l1: \n");
                            l1.Printf();
                            Console.WriteLine();
                            l2.Scanf();
                            Console.WriteLine("Danh sach l2: \n");
                            l2.Printf();
                            l4.Giao2List(l4, l1, l2);
                            Console.WriteLine("\nDanh sach sau khi lay giao: \n");
                            l4.Printf();
                            //xóa các danh sách
                            l1.DelList();
                            l2.DelList();
                            l4.DelList();
                            Console.WriteLine("\n");
                            break;
                        }
                    case 9:
                        {
                            Console.WriteLine("\n HOP 2 DANH SACH\n");
                            l1.Scanf();
                            Console.WriteLine("danh sach 1: \n");
                            l1.Printf();
                            Console.WriteLine();
                            l2.Scanf();
                            Console.WriteLine("danh sach 2: \n");
                            l2.Printf();

                            Console.WriteLine("\nDanh sach sau khi hop: \n");
                            l5.Hop2List(l5, l1, l2);
                            l5.Printf();
                            //xóa các danh sách
                            l1.DelList();
                            l2.DelList();
                            l5.DelList();
                            Console.WriteLine("\n");
                            break;
                        }
                    case 10:
                        {                         
                            int X;//phần tử cần chèn
                            Console.WriteLine("\n CAC PHEP TOAN LIEN QUAN DEN CHEN\n");
                            l.Scanf();
                            Console.WriteLine("danh sach 1: \n");
                            l.Printf();
                            Console.WriteLine();
                            Console.WriteLine("Chen vao dau danh sach: \n");
                            Console.Write("Nhap X: ");

                            X = int.Parse(Console.ReadLine());
                            l.InsertFirst(X);

                            Console.WriteLine("Ket qua : ");   
                            l.Printf();
                            Console.WriteLine("\nSap sep tang : "); 
                            l.SortInc();
                            Console.WriteLine("\nKet qua : ");
                            l.Printf();

                            Console.WriteLine("\nChen vao vi tri bat ki nhung van dam bao tang: ");
                            Console.Write("Nhap gia tri can chen: ");
                            X = int.Parse(Console.ReadLine());

                            if (X > l.EndValue())
                                l.InsertEnd(X);//chèn X vào cuối ds
                            else
                                l.InsertInc(X);//hàm này chèn vào vị trí bất kì nhưng không phải là cuối

                            Console.WriteLine("Ket qua :  \n");
                            l.Printf();
                            //xóa các danh sách
                            l.DelList();                         
                            Console.WriteLine("\n");
                            break;
                        }
                }
            } while (chon != 0);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
}

LoveIT

Tổng số bài gửi : 15
Join date : 16/01/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Bài tập 41

Bài gửi  LoveIT on Wed Feb 16, 2011 6:03 am

sao giờ giấc không đúng nhỉ. tui gửi bài này bây giờ là 20h kia mà.?? Question

LoveIT

Tổng số bài gửi : 15
Join date : 16/01/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Bài tập 41

Bài gửi  levientrinh_10TH on Tue Mar 01, 2011 8:25 pm

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Danh_sach_lien_ket_dung_mang
{
    class danhsach
    {
        //Bien pos rong cac ham la vi tri thuc trong danh sach, tinh tu 0
        int [] Element;
        int Last;// Bien de giu do dai danh sach
        public void khoitao(int num)// test
        {
            Element = new int[num];
            Last = 0;
        }
        public void makenull()//test
        {
            Last = 0;
        }
        public void nhap()//test
        {
            int n=0;
            while (isfull() == 0 || n!=-1)
            {
                Console.WriteLine("Ban nhap phan tu");
                n = int.Parse(Console.ReadLine());
                //Random rnd = new Random();
                //n = rnd.Next(189);
                insertlast(n);
                Console.WriteLine("Ban cuon nhap tiep khong, nhap c de thoat");
                String s = Console.ReadLine();
                if (s == "c" || s == "C")
                    break;
            }
        }
     
        public int isempty()//test
        {
            return Last == 0 ? 1:0;
        }
        public int Locate(int pos)//Lay gia tri tai vi tri pos, neu khong tim thay ham tra ve -1; test
        {
            if (isempty() == 1)
            {
                Console.WriteLine("Danh sach rong");
                return -1;
            }
            else
                if (pos < 0 || pos > Element.Length - 1)
                {
                    Console.WriteLine("Vi tri khong hop le");
                    return -1;
                }
            return Element[pos];
        }
        public int First()
        {
            return 1;
        }
        public int End()
        {
            return Element.Length + 1;
        }
        public int Next(int vitri)
        {
            return vitri +1;
        }
        public void duyet()//da test
        {
            if (isempty() == 1)
                Console.WriteLine("Danh sach rong");
            else
                for (int i = 0; i < dodai(); i++)
                {
                    Console.Write(Element[i] + " ");
                }
        }
        public int dodai()//da test
        {
            return Last;
        }
        public int isfull()//da test
        {
            return Last == Element.Length ? 1 : 0;
        }
        public void insertfirst(int x)//da test
        {
            if (isfull() == 1)
                Console.WriteLine("Danh sach bi day, khong the them duoc nua");
            else
            {
                for (int i = dodai();i>=1; i--)
                {
                    Element[i] = Element[i - 1];
                }
                Element[0] = x;
                Last++;
            }
        }
        public void insertlast(int x)//da test
        {
            if (isfull() == 1)
                Console.WriteLine("Danh sach bi day, khong the them duoc nua");
            else
            {
                Element[dodai()] = x;
                Last++;
            }
        }
        public void insertafter(int pos, int x)//da test
        {
            if (pos < 0 || pos > dodai() - 1)
                Console.WriteLine("Vi tri khong hop le");
            else
                if (isfull() == 1)
                    Console.WriteLine("Danh sach bi day");
                else
                {
                    for (int i = dodai(); i > pos+1; i--)
                    {
                        Element[i] = Element[i - 1];
                    }
                    Element[pos + 1] = x;
                    Last++;
                }
        }
        public int dinhvi(int x)//da test
        {
            for (int i = 0; i < dodai(); i++)
            {
                if (Element[i] == x)
                    return i;
            }
            return -1;
        }
        public void delfirst()//da test
        {
            if (isempty() == 1)
                Console.WriteLine("Danh sach rong");
            else
            {
                for (int i = 0; i < dodai() - 1; i++)
                    Element[i] = Element[i + 1];
                Last--;
            }
        }
        public void dellast()//da test
        {
            if(isempty()==1)
                Console.WriteLine("Danh sach rong");
            else
                Last--;
        }
        public void delafter(int pos)//da test
        {
            if (pos < 0 || pos >= dodai() - 1)
                Console.WriteLine("Vi tri khong hop le");
            else
                if (isempty() == 1)
                    Console.WriteLine("Danh sach bi rong");
                else
                {
                    for (int i = pos + 1; i < dodai() - 1; i++)
                        Element[i] = Element[i + 1];
                    Last--;
                }
        }
        public bool tim(int x)//da test
        {
            for (int i = 0; i < dodai(); i++)
                if (Element[i] == x) return true;
            return false;
        }
        public int dem(int x)//da test
        {
            int n=0;
            for (int i = 0; i < dodai(); i++)
                if (Element[i] == x) n++;
            return n;
        }
        public int tong()//da test
        {
            int S = 0;
            for (int i = 0; i < dodai(); i++)
                S += Element[i];
            return S;
        }
        public void xoatrung()//Xoa bo cac phan tu bi trung trong danh sach da test
        {
            for (int i = 0; i < dodai()-1; i++)
            {
                for (int j = i + 1; j < dodai(); j++)
                    if (Element[j] == Element[i])
                        delafter(j - 1);
            }
        }
        public void sorttang()// da test
        {
            if (isempty() == 1)
                Console.WriteLine("Danh sach rong");
            else
            {
                for (int i = 0; i < dodai() - 1; i++)
                    for (int j = i + 1; j < dodai(); j++)
                    {
                        if (Element[j] < Element[i])
                        {
                            int tam = Element[j];
                            Element[j] = Element[i];
                            Element[i] = tam;
                        }
                    }
            }
        }
        public void sortgiam()// da test
        {
            if (isempty() == 1)
                Console.WriteLine("Danh sach rong");
            else
            {
                for (int i = 0; i < dodai() - 1; i++)
                    for (int j = i + 1; j < dodai(); j++)
                    {
                        if (Element[j] > Element[i])
                        {
                            int tam = Element[j];
                            Element[j] = Element[i];
                            Element[i] = tam;
                        }
                    }
            }
        }
        public int max()// da test
        {
            if (isempty() == 1)
            {
                Console.WriteLine("Danh sach rong");
                return -1;
            }
            else
            {
                int max = Element[0];
                for(int i=1;i<dodai();i++)
                    if(Element[i]>max)
                        max=Element[i];
                return max;
            }
        }
        public int min()// da test
        {
            if (isempty() == 1)
            {
                Console.WriteLine("Danh sach rong");
                return -1;
            }
            else
            {
                int min = Element[0];
                for (int i = 1; i < dodai(); i++)
                    if (Element[i] < min)
                        min = Element[i];
                return min;
            }
        }
        public int timvitri(int x)//Tim vi tri de chen vao danh sach da co thu tu// da test
        {
            int i = 0;
            bool tang = true;
            for(int k=0;k<dodai()-1;k++)
                if (Element[k] > Element[k + 1])
                {
                    tang = false;
                    break;
                }
            if(tang==true)
            {
                while (i < dodai() && x > Element[i])
                    i++;
            }
            else
            {
                while (i < dodai() && x < Element[i])
                i++;
            }
            return i;
        }
        public int demsolan(int x)//Dem so lan xuat hien phan tu x trong danh sach da co thu tu da test
        {
            int n = 0;
            for (int i = 0; i < dodai(); i++)
                if (Element[i] == x)
                {
                    n += 1;
                    if (i != dodai() - 1 && Element[i + 1] != x)
                        break;
                }
            return n;
        }
        public bool kiemtracong()//Kiem tra danh sach co tao thanh mot cap so cong hay khonh//da test
        {
            if (dodai() == 1) return true;
            int d = Element[1] - Element[0];
            for (int i = 2; i < dodai(); i++)
                if (Element[i] - Element[i - 1] != d)
                    return false;
            return true;
        }
        public bool nguyento(int n)//da test
        {
            if (n <= 1) return false;
            int dem = 0;
            for (int i = 2; i <= n / 2; i++)
                if (n % i == 0) dem += 1;
            if (dem == 0) return true;
            else return false;
        }
        public void lietke()//Ham liet ke cac so nguyen to co trong danh sach//da test
        {
            for(int i=0;i<dodai();i++)
                if(nguyento(Element[i])==true)
                    Console.Write(Element[i]+" ");
        }
        public int trave(int x)//Ham tra ve nut truoc nut co noi dung x//da test
        {
            for (int i = 0; i < dodai() - 1; i++)
            {
                if (Element[i + 1] == x) return i;
            }
            return -1;
        }
        public void xoa()//Xoa tat cac cac phan tu trong danh sach//da test
        {
            Array.Clear(Element, 0, dodai());
            Last = 0;
        }
        public danhsach noi(danhsach d1, danhsach d2)//Ham noi hai danh sach, noi danh sach 2 vao danh sach 1//da test
        {
            danhsach ketqua = new danhsach();
            ketqua.khoitao(d1.dodai() + d2.dodai());
            for (int i = 0; i < d1.dodai(); i++)
                ketqua.insertlast(d1.Element[i]);
            for (int i = 0; i < d2.dodai(); i++)
                ketqua.insertlast(d2.Element[i]);
            return ketqua;
        }
        public danhsach trondanhsach(danhsach d1, danhsach d2)//Tron hai danh sach co thu tu thanh danh sach co thu tu tang// da test
        {
            danhsach ketqua = new danhsach();
            ketqua = noi(d1, d2);
            ketqua.sorttang();
            return ketqua;
        }
        public long tich()//Ham tinh tich cua cac phan tu trong danh sach//da test
        {
            long tich = 1;
            if (dodai() == 0) return 0;
            for (int i = 0; i < dodai(); i++)
                tich *= Element[i];
            return tich;
        }
        public danhsach giao(danhsach d1, danhsach d2)//Giao cua hai danh sach// da test
        {
            danhsach ketqua = new danhsach();
            int dem = 0;
            for (int i = 0; i < d1.dodai(); i++)
            {
                if (d2.tim(d1.Element[i]) == true)
                    dem += 1;
            }
            ketqua.khoitao(dem);
            for (int i = 0; i < d1.dodai(); i++)
            {
                if (d2.tim(d1.Element[i]) == true)
                    ketqua.insertlast(d1.Element[i]);
            }
            return ketqua;
        }
        public danhsach hop(danhsach d1, danhsach d2)//Hop cua hai danh sach// da test
        {
            danhsach ketqua = new danhsach();
            int dem = 0;
            for(int i=0;i<d2.dodai();i++)
            {
                if (d1.tim(d2.Element[i])==false)
                    dem++;
            }
            ketqua.khoitao(d1.dodai() + dem);
            for (int i = 0; i < d1.dodai(); i++)
                ketqua.insertlast(d1.Element[i]);
           
            for (int i = 0; i < d2.dodai(); i++)
            {
                if (d1.tim(d2.Element[i]) == false)
                    ketqua.insertlast(d2.Element[i]);
            }
            return ketqua;
        }
        public void tach()//Ham tach hai danh sach
        {
            if (Last % 2 == 0)
            {
                danhsach d1 = new danhsach();
                d1.khoitao(Last / 2);
                danhsach d2 = new danhsach();
                d2.khoitao(Last / 2);
                for (int i = 0; i < Last / 2; i++)
                    d1.insertlast(Element[i]);
                for (int i = Last / 2; i < Last; i++)
                    d2.insertlast(Element[i]);
                Console.WriteLine("Danh sach sau khi tach");
                d1.duyet();
                Console.WriteLine();
                d2.duyet();
            }
            else
            {
                danhsach d1 = new danhsach();
                d1.khoitao(Last / 2+1);
                danhsach d2 = new danhsach();
                d2.khoitao(Last / 2);
                for (int i = 0; i <= Last / 2; i++)
                    d1.insertlast(Element[i]);
                for (int i = Last / 2+1; i < Last; i++)
                    d2.insertlast(Element[i]);
                Console.WriteLine("Danh sach sau khi tach");
                d1.duyet();
                Console.WriteLine();
                d2.duyet();
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //Các bạn tự xem thiết kế trong lớp để tự viết nhé, các hàm đã được test
        }
    }
}

levientrinh_10TH

Tổng số bài gửi : 30
Join date : 05/01/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Bài tập 41

Bài gửi  LoveIT on Thu Mar 03, 2011 5:46 am

"Trìnhname" làm ơn làm phước gọi dùm hàm giao trong hàm Main được không?
viết hàm trả về làm chi cho khó anh em dị nè.

LoveIT

Tổng số bài gửi : 15
Join date : 16/01/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Gợi ý bài 41 của trinhname

Bài gửi  LoveIT on Fri Mar 04, 2011 7:52 am

Ông không gọi hàm xoatrung() trong hàm hợp và hàm giao
thì 1 số anh em không biết sẽ tưởng bài ông là sai đó(để dảm bảo kết quả đúng thì gọi hàm xoatrung() trong hàm Main).

LoveIT

Tổng số bài gửi : 15
Join date : 16/01/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Bài tập 41

Bài gửi  Sponsored content Today at 9:58 pm


Sponsored content


Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết