Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Mã nguồn C | Chương trình minh họa bảng băm để làm từ điển

  1. #1
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Cool Mã nguồn C | Chương trình minh họa bảng băm để làm từ điển

    Cái này là bài tập nhỏ mình làm trong lớp, nay post code lên cho anh em học hỏi thêm, từ điển này còn thiếu nhiều tính năng lắm, bạn nào giỏi thì tối ưu lên nhé.
    PHP Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
    #define M 26  // so Buckets

    // dinh nghia cau truc tu dien
    typedef struct TuDien 
    {
        
    char tu[12];
        
    char nghia[100];
    };

    // dinh nghia cau truc nut cua buckets
    typedef struct node
    {
        
    TuDien key;
        
    struct node *next;
    Nodetype;

    //dinh nghia nut con tro kieu Nodetype
    typedef Nodetype *Nodeptr;

    //mang con tro Bucket gom M bucket
    Nodeptr Bucket[M];

    //hàm này để khởi tạo bảng băm
    void Initialize()
    {
        for(
    int i=0;i<M;i++)
            
    Bucket[i]=NULL;
    }

    //hàm băm
    int HashFunc(char c)
    {
        if (
    c>=97c=c-32;
        return (
    c%65);
    }

    //hàm này để tạo nút có chứa khóa k,trả về kiểu con trỏ Nodeptr
    Nodeptr MakeNode(TuDien k)
    {
        
    Nodeptr p;
        
    p=(Nodeptrmalloc(sizeof(Nodetype));
        
    p->key=k;
        
    p->next=NULL;
        return 
    p;
    }

    // hàm này dùng để chèn từ vào Bucket, sau đó sắp xếp theo thứ tự tăng
    void  InsertListOrder(Nodeptr &Head,Nodeptr G)
    {
        
    Nodeptr  PQ;
        
    Head;
        while (
    != NULL)
        {
            if (
    strcmp(P->key.tu,G->key.tu)>0) break;
            
    P;
            
    Q->next;
        }
        if (
    == Head)
        {
            
    G->next Head;
            
    Head G;
        }
        else
        {
            
    G->next Q->next;
            
    Q->next G;
        }
    }


    //hàm này dùng để chèn khóa k vào Bucket thứ b
    void Place(int b,TuDien k)
    {
        
    Nodeptr p,t;
        
    p=Bucket[b];
        
    t=MakeNode(k);
        if (
    p==NULLBucket[b]=t;
        else 
    InsertListOrder(Bucket[b],t);
    }
    //hàm này dùng để chèn khóa k vào bảng băm
    void Insert(TuDien k)
    {
        
    int b=HashFunc(k.tu[0]);
        
    Place(b,k);
    }

    //duyệt Bucket
    void TraverseBucket(int b)
    {
        
    Nodeptr p;
        
    p=Bucket[b];
        while (
    p!=NULL)
        {
            
    printf("%3s,",p->key.tu);
            
    p=p->next;
        }
    }
    //duyệt toàn bộ bảng băm
    void Traverse()
    {
        for(
    int b=0;b<M;b++)
        {
            
    printf("\nBucket[%d]:",b);
            
    TraverseBucket(b);
        }
    }

    //hàm này dùng để tra nghĩa của 1 từ trong từ điển
    void TraNghia(char *s)
    {
        
    int b=HashFunc(s[0]);
        
    Nodeptr p Bucket[b];
        while (
    p!=NULL && strcmp(p->key.tu,s)!=0)
            
    p=p->next;
        if (
    p==NULLprintf("\n\nKhong tim thay \"%s\" trong tu dien",s);
        else
            
    printf("\n\nNghia cua tu \"%s\":%s",s,p->key.nghia);
    }

    //hàm này dùng để cập nhật nghĩa cho 1 từ
    void CapNhatTu(char *s,char *s1)
    {
        
    fflush(stdin);
        
    int bHashFunc(s[0]);
        
    Nodeptr p=Bucket[b];
        while (
    p!=NULL && strcmp(p->key.tu,s)!=0)
            
    p=p->next;
        if (
    p==NULLprintf("\n\nKhong tim thay \"%s\" trong tu dien",s);
        else
        {
            
    strcat(p->key.nghia,",");
            
    strcat(p->key.nghia,s1);
        }
    }

    void Pop(Nodeptr &p)     // lay phan tu dau xau
    {
        
    TuDien k;
        
    Nodeptr q;
        
    q=p;
        
    p=p->next;
        
    q->next=NULL;
        
    k=q->key;
        
    free(q);
    }

    void DelAfter(Nodeptr &q)   //xoa nut sau q
    {
        
    Nodeptr p;
        
    p=q->next;
        
    q->next=p->next;
        
    p->next=NULL;
        
    free(p);
    }

    //xóa 1 từ trong từ điển
    void XoaTu(char *s)
    {
        
    int b=HashFunc(s[0]);
        
    Nodeptr p,q;
        
    p=Bucket[b];
        while (
    p!=NULL && strcmp(p->key.tu,s)!=0)
        {
            
    q=p;
            
    p=p->next;
        }
        if (
    p==NULLprintf("\n\nKhong tim thay \"%s\" trong tu dien",s);
        if (
    p==Bucket[b]) Pop(Bucket[b]);
        else 
    DelAfter(q);
    }

    //menu của chương trình
    void MENU()
    {
        
    printf("\n\n\t\t\t\tTU DIEN ANH-VIET");
        
    printf("\n\nCac chuc nang chinh cua tu dien:");
        
    printf("\n\n1.Them tu moi vao tu dien");
        
    printf("\n\n2.Xoa mot tu khoi tu dien");
        
    printf("\n\n3.Cap nhat tu");
        
    printf("\n\n4.Tra nghia cua tu");
        
    printf("\n\n0.Thoat khoi tu dien");
        
    printf("\n\nBan chon chuc nang nao:");
    }

    int main()
    {

        
    char *s,*s1;
        
    TuDien td;
        
    int choice;
        
    Initialize();
        do
        {
            
    MENU();
            
    scanf("%d",&choice);
            switch(
    choice)
            {
                case 
    1:
                    
    clrscr();
                    
    printf("THEM TU MOI VAO TU DIEN");
                    
    printf("\n\nNhap tu can them:");fflush(stdin);
                    
    gets(td.tu);
                    
    printf("\n\nNhap nghia cua tu \"%s\":",td.tu);
                    
    fflush(stdin);
                    
    gets(td.nghia);
                    
    Insert(td);
                    break;
                case 
    2:
                    
    clrscr();
                    
    printf("\n\nNhap tu can xoa:");fflush(stdin);
                    
    gets(s);
                    
    XoaTu(s);
                    break;
                case 
    3:
                    
    clrscr();
                    
    printf("CAP NHAT NGHIA CUA TU");
                    
    printf("\n\nNhap tu can cap nhat:");
                    
    gets(s);
                    
    printf("\n\nNhap nghia cap nhat cua \"%s\":");
                    
    fflush(stdin);
                    
    gets(s1);
                    
    CapNhatTu(s,s1);
                    break;
                case 
    4:
                    
    clrscr();
                    
    printf("TRA NGHIA CUA TU");
                    
    printf("\n\nNhap tu can tra nghia:");fflush(stdin);
                    
    gets(s);
                    
    TraNghia(s);
                    break;
            }
        } while (
    choice!=0);
        return 
    0;


  2. #2
    Ngày gia nhập
    12 2008
    Bài viết
    235

    Bạn ơi xem lại đi.Mình thử rồi nhưng lỗi linh tinh cả.Đang bận thi nên chưa đọc mã để sửa được

  3. #3
    Ngày gia nhập
    04 2009
    Bài viết
    1

    Bạn ơi sao mình chạy đoạn code về "Chương trình minh họa bảng băm để làm từ điển" của bạn(bài viết 654) mà không được.Mình đang cần bài này gấp bạn giúp mình với.Thanks!

  4. #4
    Ngày gia nhập
    07 2009
    Bài viết
    5

    Cha, cai nay la C++ chu ban ha?

  5. #5
    Ngày gia nhập
    07 2009
    Bài viết
    5

    void Initialize()
    {
    for(int i=0;i<M;i++)
    Bucket[i]=NULL;
    }

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    3

    Mặc định Mã nguồn C | Chương trình minh họa bảng băm để làm từ điển

    Toàn code thôi, không muốn đọc, ai đó thử nêu cách làm hay ý tưởng gì đó đi chứ đừng đưa code nên đọc khó hiểu lắm

  7. #7
    Ngày gia nhập
    10 2008
    Bài viết
    9

    anh có thể viết thêm giúp em chức năng nữa để bổ sung cho bài hoàn thiện hơn:
    1 là đọc 1 file *.DAT đã có sẵn các ký tự đã được sắp xếp và nếu ký tự đó gồm các từ nằm trong tập "A-Z" thì tự động thêm vào từ điển

    sau khi đã khởi tạo từ điển bằng cách đọc 1 từ 1 file * dat, chức năng thứ 2 là tiếp tục đọc 1 file bất kỳ có chứa các từ và có các ký tự trong mỗi từ phải nằm trong tập A-Z thì thêm vào, nếu từ đó đã có trong từ điển thì không thêm

    Nhờ anh xem giúp, cám ơn anh

  8. #8
    Ngày gia nhập
    11 2016
    Bài viết
    3

    lỗi nhiều quá mà k có phần nạp từ điển từ file vào bảng băm kìa

Các đề tài tương tự

  1. Tài liệu tối ưu hóa mã nguồn, tinh chỉnh mã nguồn (code Tuning)?
    Gửi bởi sunshine trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 19-04-2013, 09:13 AM
  2. bảng băm đóng, bảng băm mở trong lập trình C#?
    Gửi bởi mysad trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 11-12-2010, 01:20 PM
  3. Tài liệu xây dựng bảng băm. Ai có cho mình xin?
    Gửi bởi vanmeo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 08-07-2010, 12:32 AM
  4. ứng dụng từ điền sử dụng bảng băm
    Gửi bởi daretofail trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 04-06-2010, 06:18 AM
  5. Bảng băm-ứng dụng từ điển
    Gửi bởi canhocthem trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 01-02-2008, 10:19 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn