Trả lời 
 
Đánh giá:
  • 0 Phiếu - 0 Trung bình
  • 1
  • 2
  • 3
  • 4
  • 5
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
20-09-2008, 12:16 AM
Số bài viết: #1
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
HK II bắt đầu rồi...khai topic thoai nào. Như cũ, ở đây để post bài tập, ko spam.


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
20-09-2008, 12:17 AM
Số bài viết: #2
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
1. Binary Search - Có trong sách của Dương Anh Đức, tham khảo thêm.

Mã:
#include<iostream>

using namespace std;

#define size 100



void nhap(int arr[],int n);

void xuat(int arr[],int n);

int sosanh(int arr[],int x,int y);

void sapxep(int arr[],int n);

void xoa(int arr[],int n,int m);

void them(int arr[],int n,int m,int x);



int main()

{

    int n,m;

    int arr[size];

    

    cout<<"Nhap so phan tu: \n";

    cin>>n;

    cout<<"Nhap phan tu: \n";

    nhap(arr,n);

    sapxep(arr,n);

    cout<<"Phan tu sau sap xep: \n";

    xuat(arr,n);

    

    cout<<"Nhap phan tu muon tim: \n";

    cin>>m;

    int kq;

    kq=sosanh(arr,m,n);

    if(kq==-1)

        cout<<"Khong tim thay.\n";

    else

    {

        cout<<"Tim thay tai vi tri: "<<kq<<endl;

    

        xoa(arr,n,kq);

        cout<<"Mang da xoa phan tu: "<<m<<endl;

        xuat(arr,n-1);

        

        int x,y;

        cout<<"Nhap vi tri muon them:\n";

        cin>>x;

        cout<<"Nhap phan tu muon them:\n";

        cin>>y;

        them(arr,n,x,y);

        xuat(arr,n);

    }



    return 0;

}



void nhap(int arr[],int n)

{

    for(int i=0;i<n;i++)

        cin>>arr[i];

}



void xuat(int arr[],int n)

{

    for(int i=0;i<n;i++)

        cout<<arr[i]<<" "<<endl;

}



int sosanh(int arr[],int x,int y)

{

    int min=0,max=y,ss;

    do

    {

        ss=(max+min)/2;

        if(x==arr[ss])return ss;

        else

        {

            if(arr[ss]>x)

                max=ss-1;

            else

                min=ss+1;

        }

    }while(min<=max);

    return -1;

}



void sapxep(int arr[],int n)

{

    int t;

    for(int i=0;i<n;i++)

        for(int j=n-1;j>i;j--)

            if(arr[j]<arr[j-1])

            {

                t=arr[j];

                arr[j]=arr[j-1];

                arr[j-1]=t;

            }

}



void xoa(int arr[],int n,int m)

{

    for(int i=m;i<n-1;i++)

        arr[i]=arr[i+1];

    arr[n-1]=0;

}



void them(int arr[],int n,int m,int x)

{

    if(m!=(n-1))

    {

        arr[n-1]=arr[n-2];

        for(int i=n-2;i>m;i--)

            arr[i]=arr[i-1];

        arr[m]=x;

    }

    else

        arr[n-1]=x;

}


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
20-09-2008, 12:18 AM
Số bài viết: #3
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
2. Dec to Bin - Đơn giản ^^

Mã:
#include<iostream>

using namespace std;

#define size 100



int a[size];

int sp;

void stack();

void them(int a);

int lay(int &a);



int main()

{

    stack();

    int x,y,j;



    cout<<"Nhap so thap phan: \n";

    cin>>x;

    y=x;

    

    do

    {

        them(y%2);

        y=y/2;

    }while(y>0);



    cout<<"So nhi phan doi ra la:\n";

    do

    {

        lay(j);

        cout<<j;

    }while(sp!=-1);

    cout<<endl;

    return 0;

}



void stack()

{

    sp=-1;

}



void them(int x)

{

    if(sp<(size-1))

        a[++sp]=x;

}



int lay(int &x)

{

    if(sp!=-1)

    {

        x=a[sp--];

        return x;

    }

    return 0;

}


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
27-09-2008, 10:32 AM
Số bài viết: #4
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Tháp Hà Nội bằng stack mới sưu tập đc, có hình minh hoạ đi kèm, nhưng hình như code hơi bị rối thì phải...

Mã:
#include <iostream.h>

#include <windows.h>



#define MAX 100

#define SoThap 3



///////Stack co kieu struct dung de luu ket qua xu ly////////

struct Node

{

    int n,a,b,c;

};



Node* stack[MAX];

int flag;



///////3 Stack kieu int dung de luu trang thai 3 thap A, B, C////////

int sl;

enum tower {A,B,C};

int stackTower[SoThap][MAX];

int flag_a, flag_b, flag_c;



void emptyStack();

int push(int n, int a, int b, int c);

int pop(int &n,int& a, int& b, int& c);



void emptyStackTower();

int pushTower(int number,int tower);

int popTower(int &number,int tower);



void MoveToxy(int x,int y);

void showTower();

char doiso(int a);



void main()

{

    emptyStack();

    emptyStackTower();

    cout<<"Nhap so thap can chuyen : ";

    cin>>sl;

    cout<<"Toc do chuyen thap (giay) : ";

    int s; cin>>s;

    for(int i=sl; i>0; i--)

    pushTower(i,A);

    push(sl,A,B,C);

    int n, a, b, c;

    int number;

    showTower();

    while(pop(n,a,b,c))

    {

        if(n==1)

        {

            Sleep(s*1000);

            popTower(number,a);

            pushTower(number,c);

            showTower();

            cout<<"Dia "<<number<<" tu thap "<<doiso(a)<<" qua thap "<<doiso&copy;<<endl;

        }

        else

        {

            push(n-1,b,a,c);

            push(1,a,' ',c);

            push(n-1,a,c,:cool:;

        }

    }

}



void emptyStack()

{

    flag=-1;

}



int push(int n, int a, int b, int c)

{

    if(flag==MAX-1)

        return 0;

    flag++;

    stack[flag]=new Node;

    stack[flag]->n = n;

    stack[flag]->a = a;

    stack[flag]->b = b;

    stack[flag]->c = c;

    return 1;

}



int pop(int &n, int& a, int& b, int& c)

{

    if(flag==-1)

        return 0;

    n = stack[flag]->n;

    a = stack[flag]->a;

    b = stack[flag]->b;

    c = stack[flag]->c;

    delete stack[flag];

    flag--;

    return 1;

}



void emptyStackTower()

{

    flag_a = -1;

    flag_b = -1;

    flag_c = -1;

}



int pushTower(int number,int tower)

{

    if ((tower==A&&flag_a==MAX-1) || (tower==B&&flag_b==MAX-1) || (tower==C&&flag_c==MAX-1))

        return 0;

    if(tower==A)

        stackTower[A][++flag_a]=number;

    else if(tower==:cool:

        stackTower[B][++flag_b]=number;

    else

        stackTower[C][++flag_c]=number;

    return 1;

}



int popTower(int &number,int tower)

{

    if ((tower==A&&flag_a==-1) || (tower==B&&flag_b==-1) || (tower==C&&flag_c==-1))

        return 0;

    if(tower==A)

    {

        number=stackTower[A][flag_a];

        flag_a--;

    }

    else if(tower==:cool:

    {

        number=stackTower[B][flag_b];

        flag_b--;

    }

    else

    {

        number=stackTower[C][flag_c];

        flag_c--;

    }

    return 1;

}



void MoveToxy(int x,int y)

{

    COORD pt={x,y};

    HANDLE console;

    console = GetStdHandle(STD_OUTPUT_HANDLE);

    cout.flush();

    SetConsoleCursorPosition(console,pt);

}



char doiso(int a)

{

    if(a==A)

        return 'A';

    else if(a==:cool:

        return 'B';

    else

        return 'C';

}



/////Hien thi trang thai 3 thap ra man hinh//////



void showTower()

{

    system("cls");//lenh xoa man hinh

    for(int i=sl-1;i>=0;i--)

    {

        for(int j=A;j<=C;j++)

        {

            MoveToxy(2*sl*(j+1),sl-1);

            cout<<doiso(j);

            if((j==A&&i>flag_a)||(j==B&&i>flag_:cool:||(j==C&&i>flag_c))

            {

                MoveToxy(2*sl*(j+1),2*sl-i);



                cout<<char(179);

            }

            else

            {

                MoveToxy(2*sl*(j+1)-(stackTower[j][i]*2-1)/2,2*sl-i);

                for(int g=0;g<stackTower[j][i]*2-1;g++)

                    cout<<char(219);

            }

        }

    }

    cout<<endl;

}


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
28-09-2008, 04:35 PM
Số bài viết: #5
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Anh Shin nhà ta pro quá. Nhưng cái bài tháp hà nội đó chắc chưa đủ trình độ để hiểu. Post bài này gần gũi hơn với chương trình của mình . Giải thuật thì vẫn như cũ nghĩa là vẫn dùng giải thuật của đệ quy nhưng dùng stack để khử để quy.Nói nom na là xử lý giùm cái CPU. Thử nhiều lần thấy cái này chạy nhanh hơn đệ quy nhiều. E hèm để bà con coi bình thường thì dễ quá thử mã hóa cái này thử thách dân IT lớp mình xem sao.

Mã:
I2luY2x1ZGUgPGlvc3RyZWFtLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQoNCiNkZWZpbmUJTUFY

CTEwMA0KDQppbnQgTUFOR1tNQVhdPXswfTsNCmludCBzcD0tMTsNCg0KaW50IHBvcChpbnQgJngp

DQp7DQoJaWYgKHNwID49IDApDQoJew0KCQl4ID0gTUFOR1tzcF07DQoJCU1BTkdbc3BdID0gMDsN

CgkJc3AtLTsNCgkJcmV0dXJuIHg7DQoJfQ0KCXJldHVybiAtMTsNCn0NCg0Kdm9pZCBwdXNoKGlu

dCBhKQ0Kew0KCWlmIChzcCA8IE1BWCAtIDEpDQoJCU1BTkdbKytzcF0gPSBhOw0KfQ0KDQppbnQg

bWFpbigpDQp7DQoJLy9BOmRpY2g7Qzp0cnVuZyBnaWFuO0I6ZGljaA0KCWNoYXIgbVtdPSIgQUNC

IjsNCglpbnQgTiwgbiwgZmxhZywgYSwgYywgYix4Ow0KDQoJY291dCA8PCAiTmhhcCBzbyBkaWE6

IjtjaW4+Pk47DQoNCiAgICBpZiAoIE4gPCAxKQ0KCXsNCgkJY291dCA8PCAiTiBwaGFpIGxvbiBo

b24gMFxuIjsNCgkJcmV0dXJuIG1haW4oKTsNCgl9DQoNCglwdXNoKE4pOw0KCXB1c2goMSk7DQoJ

cHVzaCgzKTsNCglwdXNoKDApOw0KDQoJd2hpbGUgKHNwICE9IC0xKQ0KCXsgDQoJCWZsYWcgPSBw

b3AoeCk7DQoJCWIgPSBwb3AoeCk7DQoJCWEgPSBwb3AoeCk7DQoJCW4gPSBwb3AoeCk7DQoJCWMg

PTYgLSBhIC0gYjsNCgkJaWYgKGZsYWcgPT0gMCkNCgkJew0KCQkJaWYgKG4gPT0gMSkNCgkJCQlj

b3V0IDw8ICJDaHV5ZW4gZGlhICI8PG48PCIgdHUgIjw8IG1bYV0gPDwgIiAtLT4gIiA8PCBtW2Jd

IDw8ICJcbiI7DQoJCQllbHNlDQoJCQl7DQoJCQkJcHVzaChuKTsNCgkJCQlwdXNoKGEpOw0KCQkJ

CXB1c2goYik7DQoJCQkJcHVzaCgxKTsNCgkJCQlwdXNoKG4tMSk7DQoJCQkJcHVzaChhKTsNCgkJ

CQlwdXNoKGMpOw0KCQkJCXB1c2goMCk7DQoJCQl9IA0KCQl9DQoJCWVsc2UNCgkJew0KCQkJY291

dCA8PCAiQ2h1eWVuIGRpYSAiPDxuPDwiIHR1ICI8PCBtW2FdIDw8ICIgLS0+ICIgPDwgbVtiXSA8

PCAiXG4iOw0KCQkJcHVzaChuLTEpOw0KCQkJcHVzaChjKTsNCgkJCXB1c2goYik7DQoJCQlwdXNo

KDApOw0KCQl9DQoJfQ0KCXJldHVybiBtYWluKCk7DQp9DQo=
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
28-09-2008, 09:27 PM
Số bài viết: #6
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
AK ak ak

1. Đồ sưu tầm, níu nói pro thì là chỉa chuyên nghiệp Biggrin

2. Cái này gọi là Da Vinci Code ah Ph34r


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
29-09-2008, 05:51 PM
Số bài viết: #7
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Thể theo yêu cầu,gợi ý cho mấy bạn một chút. Bài viết trên đã được mình mã hóa bằng base64. Muốn hiểu rõ base64 là gì bạn có thể vài link sau http://www.nhatnghe.com/FORUM/showthread.php?t=26771 nếu có khả năng thì tự giải mã, còn ko có thể nhờ anh google Biggrin
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
29-09-2008, 09:20 PM
Số bài viết: #8
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Đem về diễn đàn này luôn cho nó nhanh nè.

I. Giới thiệu:



Từ khi được giới thiệu, Base64 hiện là một giải thuật mã hóa được ứng dụng rộng rãi. Bên cạnh ứng dụng chính là encode dữ liệu truyền trong các ứng dụng mail (Multipurpose Internet Mail Extensions - MIME) base64 còn dùng trong một số lĩnh vực khác nhau.



Ý nghĩa của giải thuật này là chuyển đổi các dữ liệu binary (như file đính kèm) sang dạng plain text để có thể truyền với giao thức mail.



Cách hiện thực base64 đơn giản là dùng bảng mã 6 bit (chỉ bao gồm các ký tự a-z,A-Z,0-9) thay cho bảng mã 8 bit thông dụng.



Các bước Base64 thực hiện như sau:

1. Chuyển đổi các dữ liệu truyền sang nhị phân. Vd: với 3 ký tự ASCII 8 bit ta sẽ có dãy gồm 24 bit.

2. Tách thành các nhóm 6 bit để xử lý

3. Ánh xạ nhóm 6 bit trong bảng mã Base64 để tìm ký tự tương ứng



Hãy xét một ví dụ sau:

Dữ liệu cần chuyển đổi Base64: Man

Bước 1:

M = 77 (ASCII) = 0100.1101

a = 97 (ASCII) = 0110.0001

n = 110 (ASCII) = 0110.1110

Man = 0100.1101.0110.0001.0110.1110

Bước 2: Tách nhóm 6 bit

Man = 010011.010110.000101.101110

Bước 3: Ánh xạ trong bảng mã 64 sau:

[Image: base64.2.PNG]

[Image: base64.3.PNG]

Dữ liệu Base64: TWFu



Việc chuyển đổi từ Base64 ra dữ liệu gốc đơn giản có thể làm ngược lại.



Ngoài việc dùng chuyển đổi dữ liệu dùng truyền mail, Base64 còn dùng trong HTTP Basic Authenticate với Web Server. Username và password được truyền đến server bằng Base64 trong HTTP Header. Xem hình sau:

[Image: base64.1.PNG]

Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 1012x797



II. Dùng Base64 mã hóa Webshell để Bypass Antivirus:

1. Có 1 Webshell vd: r57.php. Shell này khi upload lên server cài đặt Antivirus sẽ dễ dàng detect được.

2. Dùng Base64 encode. Có thể dùng một số trang web encode online. Vd: http://www.motobit.com/util/base64-decoder-encoder.asp

3. Tạo file Newshell.php dán nội dung encode vào hàm base64_decode

Mã:
<?php

eval (base64_decode('abc'));

?>

Với abc là nội dung shell đã encode.



Kết thúc!


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
29-09-2008, 09:55 PM
Số bài viết: #9
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Nghe đồn là cái link encode online kia ko làm jì đc hết, decode ra lại code Ph34r


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
29-09-2008, 11:31 PM
Số bài viết: #10
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
MÃ HÓA RA NHƯ VẦY NÈ

Mã:
#include <iostream.h>

#include <stdlib.h>



#define    MAX    100



int MANG[MAX]={0};

int sp=-1;



int pop(int &x)

{

    if (sp >= 0)

    {

        x = MANG[sp];

        MANG[sp] = 0;

        sp--;

        return x;

    }

    return -1;

}



void push(int a)

{

    if (sp < MAX - 1)

        MANG[++sp] = a;

}



int main()

{

    //A:dich;C:trung gian;B:dich

    char m[]=" ACB";

    int N, n, flag, a, c, b,x;



    cout << "Nhap so dia:";cin>>N;



    if ( N < 1)

    {

        cout << "N phai lon hon 0\n";

        return main();

    }



    push(N);

    push(1);

    push(3);

    push(0);



    while (sp != -1)

    {

        flag = pop(x);

        b = pop(x);

        a = pop(x);

        n = pop(x);

        c =6 - a - b;

        if (flag == 0)

        {

            if (n == 1)

                cout << "Chuyen dia "<<n<<" tu "<< m[a] << " --> " << m[b] << "\n";

            else

            {

                push(n);

                push(a);

                push(:cool:;

                push(1);

                push(n-1);

                push(a);

                push&copy;;

                push(0);

            }

        }

        else

        {

            cout << "Chuyen dia "<<n<<" tu "<< m[a] << " --> " << m[b] << "\n";

            push(n-1);

            push&copy;;

            push(:cool:;

            push(0);

        }

    }

    return main();

}



Dùng trang này để decode của thằng Base64 online nè http://www.motobit.com/util/base64-decoder-encoder.asp
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
09-10-2008, 01:08 AM
Số bài viết: #11
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
lâu lắm không lên lại diễn đàn,sao tự nhiên thấy phần bài tập cấu trúc dữ liệu không được bàn luận sôi nổi như môn kĩ thuật lập trình vậy ta,nó đâu có vẻ khó hơn.Mình xin đóng góp bài sắp xếp danh sách liên kết không có thứ tự sang danh sách liên kết có thứ tự(câu 8F-Buổi thực hành 2).Nếu ai có cách làm tối ưu hơn thì xin post lên để mình tham khảo vì môn này yêu cầu "thuật giải không chỉ đúng mà còn phải là đúng nhất và hay nhất - Trích lời của thầy Rolleyes " .

Mã:
void sapxep()

{

    Node *sx, *x, *y;

    int n;

    sx = NULL;

    x = first;

    y = new Node;

    if(first != NULL)

    {

        while(x != NULL)

        {

            n = x->info;

            while(x != NULL)

            {

                if(n > x->info)

                    n = x->info;

                x = x->link;

            }

            tim_xoa(n);

            x = first;

            y = new Node;

            y->link = sx;

            y->info = n;

            sx = y;

        }

        while(y != NULL)

        {

            n = y->info;

            y = y->link;

            themdau(n);

        }

        while(y != NULL)

        {

            y = sx;

            if(sx == NULL)

                break;

            sx = sx->link;

            delete y;

        }

    }

}

đây chỉ là code của hàm sắp xếp,bạn nào muốn test thì tự bỏ vào phần main nha,mấy cái lặt vặt đó mình nghĩ ai cũng làm được nên không post lên làm gì.
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
11-10-2008, 11:09 PM
Số bài viết: #12
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
cái này ko phải mình spam nha..

Những bạn nào có "khả năng" thì nên post bài lên..nhưng theo "lời khuyên" của mình là : khu vực này chỉ nên post bài tự làm của tất cả mọi người (cả đúng lẫn không đúng) để chúng ta góp ý.Vì bình thường một bạn yếu về lập trình sẽ bị "hoa mắt" vì mấy đoạn code mà người đó không hiểu gì ->nản ->ko xem ->không ai vô ->vắng. Còn nếu bài sưu tầm thì nên bỏ vào topic khác..trừ khi có bài tập nào khó quá cần bài tập tham khảo

Chương trình quảng cáo..Onion15
Chuyên mua, bán, trao đổi, sửa chữa máy tính để bàn, laptop, linh kiện, và các thiết bị ngoại vi.
Mọi thông tin liên hệ 0938.826.116.....Onion07
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
12-10-2008, 12:16 AM
Số bài viết: #13
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
ùh,mình tán thành ý kiến của Trí,để thể hiện sự tán thành,xin post thêm một bài nữa Happy .

Đây là câu i - bài 12 - buổi thực hành thứ hai,lúc làm thực hành thấy có nhìu người hỏi câu này nên quyết định post lên cho bà con xem chơi : tìm một phần tử có giá trị bằng với giá trị x hoặc gần nhất và lớn hơn phần tử x nhập vào sau đó thêm một phần tử sau phần tử tìm thấy.

Mã:
int timthem(int m, int n)

{

    Node *x , *y = new Node, *z = new Node;

    z->info = n;

    x = first;

    if(x == NULL)

        return 0;

    else

    {

        while(x != NULL)

        {

            if(x->info > m)

            {

                y = x;

                break;

            }

            x = x->next;

        }

        if(x == NULL)

            return 0;

        x = first;

        while((x != NULL) && (x->info != n))

        {

            

            if(y->info > x->info && x->info > m)

                y = x;

            x = x->next;

        }

        if(x != NULL)

        {

            y = x->next;

            z->pre = x;

            z->next = y;

            x->next = z;

            y->pre = z;

        }

        else

        {

            x = y->next;

            z->pre = y;

            z->next = x;

            x->pre = z;

            y->next = z;

        }

        return 1;

    }

}

ai không hiểu chỗ nào thể hỏi,ai có cách tối ưu hơn xin cho ý kiến,vì ngày mai tươi sáng,cố lên mọi người ơi Wink
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
12-10-2008, 04:05 PM
Số bài viết: #14
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Đc sự khích lệ của PT , mình cũng post một bài lên ^^ , bài 12 câu i , thuật giải khác với của PT , các bồ coi và test giùm , giúp mình hoàn thiện bài này nữa há

thuật giải là : mình tìm số lớn hơn và gần với số mình nhập vô bằng biến n ; rùi thêm một số sau số đó .

sau đây là code :



Mã:
void tim_them ( int x )

{

    if ( first == NULL )

        cout<< " danh sach rong\n";

    else

    {

        node * p = first;

        node * q;

        int n = 32767;

        while ( p != NULL )// tim so lon hon va gan nhat

        {

            if ( p -> info - x < n && p -> info >= x   )

            {

                q = p;

                n = p -> info - x;

            }

            p = p -> next;

        }

        if (  n == 32767  )

            cout << " ko tim thay so lon hon \n";

        else

        {

            cout << " so bang hay lon hon va gan nhat la :"<< q->info

                                    <<"\nnhap so mun chen vao so vua tim dc :";

            cin >> x;

            

            if ( q -> next == NULL )

                them_cuoi ( x ); // ham them vao cuoi ( bai 12 cau g )

            else     

            {    node * y = new node;

                y -> info = x;

                node * w = q -> next;

                q -> next = y;

                y -> pre = q;

                y -> next = w;

                w -> pre = y;    

            }

        }



    }

}
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
13-10-2008, 05:47 PM
Số bài viết: #15
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Bài này chưa test! Nhìn sơ giải thuật cũng có lí! Nhưng đặt n = 32767 có vẻ gượng ép wa'! Dry Thấy cách của tao mí lị PT coi đc hơn Biggrin
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
15-10-2008, 09:48 PM
Số bài viết: #16
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Giải thuật sắp xếp danh sách cho bài 7 [của 1 thành viên B1.2]

Mã:
void sort()

{

    Node *a,*b,*min,*p;

    a = first;

    b = first;

    while (a != NULL)

    {

        if ( a->info >= b->info)

        {    

            b=a;

            a=a->link;            

        }

        else

        {

            b->link = a->link;

            a->link = b;

            if (a->info < first->info)

            {

                a->link = first;

                first = a;

            }

            else

            {

                min = first;

                while (min != b && min->info <= a->info)

                {

                    p = min;

                    min = min->link;

                }

                if (min != :cool:

                {

                    p->link = a;        

                    a->link = min;

                }

                else p->link = a;

            }

            a=b->link;

        }

        

    }

}


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
15-10-2008, 09:49 PM
Số bài viết: #17
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Bài 16 của 1 thành viên B1.2 - Nhờ tui post lên để pà kon tham khảo, comment và debug Biggrin

Mã:
#include <iostream.h>

#define max 100

int a[max];

int b[max];

int i,n,m,j,k,soptu1,soptu2,soptu3;



void hop(int c[],int m,int n)

{

    int dem=0;

    for (i = 0;i < n;i++)

        c[i] = a[i];

    for (k = 0;k < m;k++)

    {

        for (j = 0;j< i;j++)

        {

            if (c[j] != b[k])

                dem++;

        }

        if (dem == i)

        {

            c[i] = b[k];

            i++;

        }

        dem = 0;

    }

    soptu1 = i;

    cout <<"Hop cua 2 mang la :";

    for (i = 0;i < soptu1;i++)

        cout << c[i] << "  ";

    cout <<endl;    

}





void giao(int c[],int m,int n)

{

    soptu2 = 0;

    k = 0;

    for (i = 0; i < n; i++)

    {

        for (j = 0;j< m;j++)

        {

            if ( a[i] == b[j])

            {

                c[k++] = a[i];

                soptu2++;

                break;

            }

        }

    }

    

    if (soptu2 != 0)

    {

        cout <<"Giao cua 2 mang la :";

        for (i = 0;i< soptu2;i++)

            cout << c[i] << "  ";

        cout <<'\n';

    }

    else cout <<"2 mang ko co ptu chung\n";



}



void bu(int c1[],int c2[],int c3[])

{

    int dem=0;

    k = 0;

    for (i = 0; i < soptu1; i++)

    {

        for (j = 0; j<soptu2;j++)

        {

            if (c1[i] == c2[j])

            {

                dem++;

            }

            

        }

        if (dem < 1)

        {

            c3[k++] = c1[i];

            soptu3++;

            

        }

        dem = 0;

    }

    if (soptu != 0)

    {

        cout <<"Phan bu cua 2 mang la :";

        for (i = 0;i<soptu3;i++)

            cout <<c3[i] << "  ";

        cout <<'\n';

    }

    else cout <<"Phan bu cua 2 mang la rong\n";

}

void main()

{

    cout <<"Nhap vao so ptu cua mang 1:";

    cin >> n;

    cout <<"Nhap vao cac ptu mang 1:";

    for (i = 0;i<n;i++)

        cin >> a[i];

    cout <<"Nhap vao so ptu cua mang 2:";

    cin >> m;

    cout <<"Nhap vao cac ptu mang 2:";

    for (i = 0;i<m;i++)

        cin >> b[i];





    int c1[max];

    int c2[max];

    int c3[max];

    hop(c1,m,n);

    giao(c2,m,n);

    bu(c1,c2,c3);

}


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
17-10-2008, 01:56 AM
Số bài viết: #18
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Mình chưa làm xong bài 8 nữa mà Shin hâm làm tới bài 16 rồi à T_____T
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
17-10-2008, 09:56 AM
Số bài viết: #19
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
Pạn Shin mới làm tới bài 9 ah Biggrin hum nay sẽ làm xong tất cả Smile (nếu ko có jì quyến rũ làm việc khác)


Dân ta phải biết sử ta - Cái jì không biết lên tra Google
Quay đầu là bờ - Không ngờ là vực Cắn móng tay
Khuyến khích sáng tạo - Ba xạo thì chém

Visit this user's website Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
23-10-2008, 09:36 AM
Số bài viết: #20
Bài tập Cấu trúc dữ liệu - Thuật giải đã giải
{P}ro.gramm3rs{L} ' Viết:  Đc sự khích lệ của PT , mình cũng post một bài lên ^^ , bài 12 câu i , thuật giải khác với của PT , các bồ coi và test giùm , giúp mình hoàn thiện bài này nữa há

thuật giải là : mình tìm số lớn hơn và gần với số mình nhập vô bằng biến n ; rùi thêm một số sau số đó .

sau đây là code :



Mã:
void tim_them ( int x )

{

    if ( first == NULL )

        cout<< " danh sach rong\n";

    else

    {

        node * p = first;

        node * q;

        int n = 32767;

        while ( p "= NULL )// tim so lon hon va gan nhat

        {

            if ( p -> info - x < n 'amp;'amp; p -> info >= x   )

            {

                q = p;

                n = p -> info - x;

            }

            p = p -> next;

        }

        if (  n == 32767  )

            cout << " ko tim thay so lon hon \n";

        else

        {

            cout << " so bang hay lon hon va gan nhat la :"<< q->info

                                    <<"\nnhap so mun chen vao so vua tim dc :";

            cin >> x;

            

            if ( q -> next == NULL )

                them_cuoi ( x ); // ham them vao cuoi ( bai 12 cau g )

            else     

            {    node * y = new node;

                y -> info = x;

                node * w = q -> next;

                q -> next = y;

                y -> pre = q;

                y -> next = w;

                w -> pre = y;    

            }

        }



    }

}
Bạn ơi. vui lòng giải thích cho mình hiểu dùm chổ n=32767 nhé. mình k hỉu

rùi" Cảm ơn bạn trước. Vìsao chỉ bằng 32767 mà k là số khác?. Blink Smile
Tìm các bài viết của người này
Trích dẫn thông điệp này trong bài trả lời
Trả lời 


Chủ đề tương tự...
Chủ đề: Tác giả Phản hồi: Lượt xem: Bài viết cuối
  Kêu gọi anh em B1 chuẩn bị cho mùa giải mới pham_tri_11 21 183 24-08-2010 01:58 PM
Bài viết cuối: pham_tri_11
Thumbs Down Giải Bài Thi Lập Trình Mạng WebSVer Judgement™ 6 305 22-08-2010 08:53 PM
Bài viết cuối: Judgement™
  xin tài liệu tư tưởng hcm và chính trị cuối khoas huutai_huutai28 0 24 20-08-2010 09:08 AM
Bài viết cuối: huutai_huutai28
  Xin tai lieu ma nguon mo yulon 0 39 28-07-2010 07:24 PM
Bài viết cuối: yulon
Tongue Tài liệu mã nguồn mở tham khảo của thầy nè huutai_huutai28 0 201 16-04-2010 10:59 PM
Bài viết cuối: huutai_huutai28

Chuyển diễn đàn:

Liên hệSinh viên Đại Học MởLên trênNội dungKiểu đơn giảnTin RSS