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

Đề tài: Danh sách liên kết đơn

  1. #1
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    Angry Danh sách liên kết đơn

    Code:
    /*Viet chuong trinh tach mot danh sach thanh 2 danh sach:
       - Mot toan so chan
       - Mot toan so le    */
    
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    struct node
    {
    	int info;
    	struct node *next;
    };
    typedef node *NODEPTR;
    NODEPTR First, First1, First2;  
    
    void Initialize(NODEPTR &First)
    {
    	First = NULL;
    }
    
    NODEPTR New_node()
    {
    	NODEPTR p;
    	p = (NODEPTR)malloc(sizeof(struct node));
    	return p;
    }
    
    void Creat_list(NODEPTR &First, int n)
    {
    	NODEPTR p;
    	int i = 0;
    	Initialize(First);
    	randomize();
    	while(i < n)
    	{
    		if(First == NULL)
    		{
    			p = New_node();
    			First = p;
    		}
    		else
    		{
    			p->next = New_node();
    			p = p->next;
    		}
    		p->info = random(100);
    		p->next = NULL;
    		i++;
    	}
    }
    
    void Traverse(NODEPTR First)
    {
    	NODEPTR p;
    	p = First;
    	while(p != NULL)
    	{
    		printf("\n%d",p->info);
    		p = p->next;
    	}
    }
    
    void Traverse1(NODEPTR First1)
    {
    	NODEPTR p;
    	p = First1;
    	while(p != NULL)
    	{
    		printf("\n%d",p->info);
    		p = p->next;
    	}
    }
    
    void Traverse2(NODEPTR First2)
    {
    	NODEPTR p;
    	p = First2;
    	while(p != NULL)
    	{
    		printf("\n%d",p->info);
    		p = p->next;
    	}
    }
    
    
    void Clear_list(NODEPTR &First)
    {
    	NODEPTR p;
    	while(First != NULL)
    	{
    		p = First;
    		First = p->next;
    		free(p);
    	}
    }
    
    void Tach(NODEPTR &First, NODEPTR &First1, NODEPTR &First2)
    {
    	NODEPTR p, p1, p2; //First1 chan, First2 le
    	First1 = New_node();
    	First2 = New_node();
    	p1 = First1;
    	p2 = First2;
    	p = First;
    	while(p != NULL)
    	{
    		if(p->info % 2 == 0)
    		{
    			p1->next = p;
    			p1 = p;
    		}
    		else
    		{
    			p2->next = p;
    			p2 = p;
    		}
    		p = p->next;
    	}
    	p1 = First1;
    	First1 = p1->next;
    	free(p1);
    	p2 = First2;
    	First2 = p2->next;
    	free(p2);
    	Clear_list(First);
    }
    
    void main()
    {
    	clrscr();
    	int n;
    	printf("Nhap so phan tu cua danh sach: ");	scanf("%d",&n);
    	Creat_list(First, n);
    	Traverse(First);
    	Tach(First, First1, First2);
    	printf("\nDanh sach 1: ");	Traverse1(First1);
    	printf("\nDanh sach 2: "); 	Traverse2(First2);
    	getch();
    }
    các bạn ơi xém giúp mình hàm Tach với? Và cho mình hỏi cỏn trỏ và biến con trỏ khác nhau thế nào?
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Bạn viết code rất sáng sủa đấy, đó là một ưu điểm
    Code dưới chỉ sửa mấy cái linh tinh thôi, hàm tách cũng chưa viết lại đâu, tuy nhiền mình góp ý với bạn như này, không cần viết đến 3 cái hàm Traverse() với nội dụng y hệt nhau vậy, 1 cái là đủ.

    Mình đưa ra ý tưởng tách như này bạn viết thử xem sao, dùng p để duyệt danh sách từ first đến NULL nếu gặp node có info là lẻ thì tách ra danh sách first1 (hàm này viết tương tự như hàm Create_list, 2 TH như vậy) ta đc 2 danh sách mới first và first1

    Code:
    /*Viet chuong trinh tach mot danh sach thanh 2 danh sach:
       - Mot toan so chan
       - Mot toan so le    */
    
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    struct node
    {
    	int info;
    	struct node *next;
    };
    
    typedef struct node *NODEPTR;
    
    NODEPTR First, First1;  
    
    void Initialize(NODEPTR &First)
    {
    	First = NULL;
    }
    
    NODEPTR New_node()
    {
    	NODEPTR p;
    	p = (NODEPTR)malloc(sizeof(node));
    	return p;
    }
    
    void Creat_list(NODEPTR &First, int n)
    {
    	NODEPTR p;
    	int i = 0;
    	Initialize(First);
    	randomize();
    	while(i < n)
    	{
    		if(First == NULL)
    		{
    			p = New_node();
    			First = p;
    		}
    		else
    		{
    			p->next = New_node();
    			p = p->next;
    		}
    		p->info = random(100);
    		p->next = NULL;
    		i++;
    	}
    }
    
    void Traverse(NODEPTR First)
    {
    	NODEPTR p;
    	p = First;
    	while(p != NULL)
    	{
    		printf("\n%d",p->info);
    		p = p->next;
    	}
    }
    
    void Clear_list(NODEPTR &First)
    {
    	NODEPTR p;
    	while(First != NULL)
    	{
    		p = First;
    		First = p->next;
    		free(p);
    	}
    }
    
    /*void Tach(NODEPTR &First, NODEPTR &First1, NODEPTR &First2)
    {
    	NODEPTR p, p1, p2; //First1 chan, First2 le
    	First1 = New_node();
    	First2 = New_node();
    	p1 = First1;
    	p2 = First2;
    	p = First;
    	while(p != NULL)
    	{
    		if(p->info % 2 == 0)
    		{
    			p1->next = p;
    			p1 = p;
    		}
    		else
    		{
    			p2->next = p;
    			p2 = p;
    		}
    		p = p->next;
    	}
    	p1 = First1;
    	First1 = p1->next;
    	free(p1);
    	p2 = First2;
    	First2 = p2->next;
    	free(p2);
    	Clear_list(First);
    }*/
    
    int main()
    {
    	clrscr();
    	int n;
    	printf("Nhap so phan tu cua danh sach: ");	scanf("%d",&n);
    	Creat_list(First, n);
    	Traverse(First);
    	//Tach(First, First1, First2);
    	printf("\nDanh sach 1: ");	Traverse(First);
    	printf("\nDanh sach 2: "); 	Traverse(First1);
    	getch();
    }
    Have fun!

  3. #3
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    Cảm ơn bạn
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mình viết hàm tách rồi nhưng ban làm xong rồi hãy khớp thử nhé, có điều mình không có hàm radomize();

    C Code:
    1. void Tach(NODEPTR &First, NODEPTR &First1)
    2. {
    3.     NODEPTR p, p1,p2;
    4.     Initialize(First1);
    5.     p = First;
    6.     while (p != NULL)
    7.     {
    8.         if (p->info%2==1)
    9.         {
    10.             p1=p;
    11.             p=First;
    12.             while (p->next!=p1) p=p->next;
    13.             p->next=p1->next;
    14.             if(First1 == NULL)
    15.             {
    16.                 First1 = p1;
    17.                 p2=p1;
    18.             }
    19.             else
    20.             {
    21.                 p2->next=p1;
    22.                 p2 = p2->next;
    23.             }
    24.         }
    25.         else p=p->next;
    26.     }
    27. }

  5. #5
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    Đây là code của mình những vẫn chưa được thì phải?
    Code:
    void Tach(NODEPTR First, NODEPTR &First1, NODEPTR &First2)
    {
    	NODEPTR p, p1, p2; //First1 chan, First2 le
    	First1 = New_node();  //tao gia nut dau tien
    	First2 = New_node();  //tao gia nut dau tien
    	p1 = First1;
    	p2 = First2;
    	p = First;
    	while(p != NULL)
    	{
    		if(p->info % 2 == 0)
    		{
    			p1->info = p->info;
    			p1->next = New_node();
    			p1 = p1->next;
    		}
    		else
    		{
    			p2->info = p->info;
    			p2->next = New_node();
    			p2 = p2->next;
    		}
    		p = p->next;
    	}
    	p1 = NULL;
    	p2 = NULL;
    }
    code của bạn mình đọc ko hiểu, bạn có thể giải thích giúp mình ko?
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

  6. #6
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    Mặc định Danh sách liên kết đơn

    Code:
    void Tach(NODEPTR First, NODEPTR &First1, NODEPTR &First2)
    {
    	NODEPTR p, p1, p2; //First1 chan, First2 le
    	First1 = New_node();  //tao gia nut dau tien
    	First2 = New_node();  //tao gia nut dau tien
    	p1 = First1;
    	p2 = First2;
    	p = First;
    	while(p != NULL)
    	{
    		if(p->info % 2 == 0)
    		{
    			p1->next = p;
    			p1 = p1->next;
    		}
    		else
    		{
    			p2->next = p;
    			p2 = p2->next;
    		}
    		p = p->next;
    	}
    	p1->next = NULL;
    	p2->next = NULL;
    	p1 = First1;
    	First1 = p1->next;
    	free(p1);  //xoa nut gia dau danh sach 1
    	p2 = First2;
    	First2 = p2->next;
    	free(p2); //xoa nut gia dau danh sach 2
    }
    Mình tự sửa được rồi
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

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