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

Đề tài: Cho hỏi về danh sách liên kết !!

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

    Mặc định Cho hỏi về danh sách liên kết !!

    Mình đang vọc đến phần links list này, đây là code của mình, chạy hoài mà k dc, mong mọi người chỉ giúp. Thank !!
    Code:
    #include<stdio.h>
    #include<conio.h>
    
    typedef int datatype;
    struct node
    {
    	datatype data;
    	node *next;
    };
    typedef node *nodeptr;
    
    // Khoi tao list rong
    void initnode(nodeptr &list)
    {
    	list=NULL;
    }
    // Kiem tra list rong
    int emptylist(nodeptr list)
    {
    	return(list==NULL);
    }
    // Tao 1 nut chua du lieu cho truoc
    nodeptr makenode(datatype x)
    {
    	nodeptr p = new node; // p giu dia chi nut moi cap phat
    	p->data = x;
    	p->next = NULL; // Nut ke tiep chua co giu lieu nen gan bang NULL
    	return p; // Tra ve dia chi node moi cap phat trong bo nho
    }
    // Chen 1 node vao dau dau list
    void insertfirstlist(nodeptr &list, datatype x)
    {
    	nodeptr p = makenode(x); // Cap phat bo nho cho 1 nut, tao nut p chua x
    	p->next = list;          // cho p giu dia chi nut dau
    	list = p;               // list giu dia chi cua p
    }
    // Chen 1 nut vao sau 1 nut khac(q)
    void insertafterlist(nodeptr q, datatype x)
    {
    	nodeptr p = makenode(x);
    	p->next = q->next;     //  p->next giu dia chi cua q->next
    	q->next = p;           // q->next gia dia chi cua p
    }
    // Chen 1 nut vao list da sap xep(tang dan)
    void insertarrangelist(nodeptr &list, datatype x)
    {
    	nodeptr p = makenode(x);
    	if((emptylist(list)) || p->data > x)
    		insertfirstlist(list, x);
    	else
    	{	for(nodeptr q = list; q->next, q->next->data < x; q=q->next)
    			{}
    		insertafterlist(list, x);
            }
    } 
    // Tim 1 nut trong list
    nodeptr searchlist(nodeptr list, datatype x, nodeptr &q)   // q giu dia chi cua p
    {
    	nodeptr p = list;
    	q = NULL;
    	while(p != NULL)
    	{
    		if(p->data == x) return p; // giu dia chi cua p
    		q = p;                     // giu dia chi cua q truoc p
    		p = p->next;
    	}
    	return NULL;
    }        	
    // Huy 1 nut dau
    void delfirstlist(nodeptr &list)
    {
    	nodeptr p = list;       // cho p giu dia chi node dau
    	list = p->next;  // nut dau (list) bay gio gan cho node sau p 
    	delete p;       // huy node p
    }
    // Huy nut sau 1 nut q
    void delafterlist(nodeptr q)
    {
    	nodeptr p = q->next;       // Cho p giu dia chi nut can xoa
    	q->next = p->next;  // q giu dia chi cua node sau p
    	delete p; 
    }
    // Huy 1 nut dau tien co giu lieu cho truoc
    void deldata(nodeptr list, datatype x)
    {
    	nodeptr q, t;
            t = searchlist(list, x, q);
    	if(t == NULL)
    		printf("\nKhong co %d trong list.", x);
    	else
    		delafterlist(t);
    }
    // Huy tat ca cac nut co giu lieu cho truoc
    void delalldata(nodeptr list, datatype x)
    {
    	if(x == list->data)
    	{
    		nodeptr t = list;
    		list = list->next;
    		delete t;
    		delalldata(list, x);
    	}
    	else
    		delalldata(list->next, x);
    }
    // Duyet list
    void traverselist(nodeptr list)
    {
    	nodeptr p = list;  // cho p giu dia chi node dau
    	while(p != NULL)   // Trong khi chua toi cuoi list
    	{
    		printf("%d", p->data);  // in du lieu tai node
    		p = p->next;            // cho p tro toi node ke tiep
    	}
    
    }
    // Huy list
    void dellist(nodeptr list)
    {
    	nodeptr p = list;
    	while(p != NULL)      // node dau khac NULL, con node
    	{
    		list = p->next;   // list tro toi node sau node dau
    		delete p;         // huy node p
    		p = list;         // lai cho p tro toi node dau
    	}
    }
    // Sap xep list
    void sortlist(nodeptr list)
    {
            datatype x;
    	nodeptr p,q,min;
    	for(p = list; p->next !=NULL; p = p->next)      // duyet p tu dau den cuoi list
    	{
    		min = p;          // Ga su p la min(nho nhat)
    		for(q = p->next; q != NULL; q = q->next)      // duyet q sau p
    			if(q->data < min->data) min = q;       // neu min > q , cap nhat lai min = q
    			if(min != p)                           // neu min khac p thi hoan vi du lieu p, dl min de p chua gia tri nho nhat
    			{ x = p->data; p->data = min->data; min->data = x;}
    	}
    }
    void main()
    {
    	nodeptr list;
            initnode(list);
            int n, x;
    	printf("\n Nhap n: ");
            scanf("%d", &n);
    	printf("\n Nhap cac so nguyen: ");
    	for(int i= 0; i<n; i++)
    		scanf("%d", &list->data); 
    	printf("\n Nhap x: "); scanf("%d", &x);
    	traverselist(list);
                 sortlist(list);
    	traverselist(list);
    	insertarrangelist(list, x);
    	traverselist(list);
    	deldata(list, x);
    	traverselist(list);
    	delalldata(list, x);
    	traverselist(list);
            getche();
    }

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Xóa hết đi, viết lại từng hàm 1 thôi rồi test thử ! Tui bảo đảm vọc cách này hiệu quả hơn nhiều vì hồi xưa tui cũng bị y chang, tham T_T ! Nếu vẫn không được thì post compiler error messages lên đây nếu có !

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

    Thank r_r, khi code xong mà chạy k dc thì nản thật(ko muốn nghĩ cách sửa luôn, chỉ mong có ai giúp)
    Bài trên sai toàn cái cơ bản, hiz. Sửa được thật là vui.

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Thank r_r, khi code xong mà chạy k dc thì nản thật(ko muốn nghĩ cách sửa luôn, chỉ mong có ai giúp)
    Bài trên sai toàn cái cơ bản, hiz. Sửa được thật là vui.
    See ! I told ya ! Tự mình sữa chạy được cảm giác phê lắm cơ ! Chịu khó mà chút mà học được rất nhiều chứ tui cho cậu code cậu đâu có tìm được cảm giác đó ! Đúng không nào ^_^

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn cứ làm theo cách của r2 đi, test thử từng hàm xem chạy đúng ko cái đã, nếu sai thì sửa ngay. Đừng cố sửa hết một lần cả chương trình.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  6. #6
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Mặc định Cho hỏi về danh sách liên kết !!

    Hic, muốn giúp bạn mà nhìn code dài quá nên ngại ,xem qua thì thấy 1 số chỗ chưa ổn lắm.
    Chỗ này :
    PHP Code:
    void insertfirstlist(nodeptr &list, datatype x)
    {
        
    nodeptr p makenode(x); // Cap phat bo nho cho 1 nut, tao nut p chua x
        
    p->next = list;          // cho p giu dia chi nut dau
        
    list = p;               // list giu dia chi cua p

    Phải kiểm tra list trước xem có null không đã mới insert.
    PHP Code:
    void insertfirstlist(nodeptr &list, datatype x)
    {
        
    nodeptr p makenode(x); // Cap phat bo nho cho 1 nut, tao nut p chua x
        
    if(emtylist(list))
            list=
    p;
        else
        {
            
    p->next = list;          // cho p giu dia chi nut dau
            
    list = p;
        }
    // list giu dia chi cua p
    }
    // 
    Các thao tác với list thì đầu tiên nên kiểm tra xem nó có rỗng hay không rồi mới làm gì thì làm. Mới xem qua đó thôi,hình như vẫn còn nhiều lỗi nữa.Mà bạn nên đặt tên biến có ý nghĩa 1 chút,tớ xem code bạn toàn nhầm p với q thôi .Tốt nhất là bạn nên làm theo ý kiến của 2 mod,test từng hàm chứ cả bải thế này nản quá
    Cánh Chym ứ mỏi

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

    Trùi!Nhìu hàm zữ vậy thì ai mà koi hết cho bạn đc!
    Bạn cứ thử từng hàm 1 đi nhé! Về DSLK đơn ,tui cũng có mấy hàm cơ bản!Nếu bạn cần thì sẵn sàng share!
    CHúc zui!

  8. #8
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Đừng nản tự debug đi.

    OoShinHaoO

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

  1. Hướng dẫn Biểu diễn thích hợp bằng danh sách liên kết đơn hoặc danh sách liên kết kép
    Gửi bởi maitrung trong diễn đàn Thủ thuật, Tutorials CTDL & Giải thuật
    Trả lời: 3
    Bài viết cuối: 04-08-2012, 08:01 PM
  2. Cấu trúc dữ liệu Cách tạo danh sách liên kết mới từ danh sách liên kết đã cho như thế nào?
    Gửi bởi giacmo1612 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 2
    Bài viết cuối: 30-11-2011, 04:43 PM
  3. Nhập và xuất danh sách liên kết lồng danh sách liên kết?
    Gửi bởi nvluong_it trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 22-04-2011, 11:30 AM
  4. Lập trình C Danh sách liên kết - Xử lý danh sách liên kết trong lập trình C
    Gửi bởi phucduan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 08-11-2010, 10:25 PM
  5. Danh sách liên kết, code nhập danh sách sinh viên có lỗi làm sao sửa?
    Gửi bởi acmilan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 10-04-2009, 08:24 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