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

Đề tài: Coi giùm em bài liên kết đơn này cái

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

    Mặc định Coi giùm em bài liên kết đơn này cái

    Code:
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct node
    {
    	int info;
            node *next;
    };
    
    typedef struct dslkd
    {
    	node *head, *tail;
    };
    
    void taodslk(dslkd *ds);
    void BinaryInsertion_Sort (int a[],int n);
    void duadayvaods(int a[], int n, dslkd *ds);
    void themcuoids(dslkd *ds, node* p);
    node* getnode();
    void themdau(dslkd *ds, node* p);
    void xuatds(dslkd *ds);
    void xuatmang(int a[], int n);
    
    void taodslk(dslkd *ds)
    {
    	ds->head=NULL;
            ds->tail=NULL;
    }
    
    void BinaryInsertion_Sort (int a[],int n)
    {
    	for (int i=1;i<n;i++)
    	{
    		int x=a[i],left=0,right=i-1;
    		while (left<=right)
    		{
    			int mid=(left+right)/2;
    			if (x<a[mid]) right=mid-1;
    			else left=mid+1;
    		}
    		for (int j=i-1;j>=left;j--)
    			a[j+1]=a[j];
    	a[left]=x;
    	}
    }
    
    void duadayvaods(int a[], int n, dslkd *ds)
    {
    	node *p;
    	p=getnode();
    	p->info=a[0];
            themdau(ds,p);
    	for(int i=1; i<n; i++)
    	{
    		p=getnode();
    		p->info=a[i];
                    themcuoids(ds,p);
    	}	
    }
    
    void themdau(dslkd *ds, node *p)
    {
    	p=ds->head;
    	ds->head=p;
    	if(ds->tail==NULL)
            	ds->tail=p;
    }
    
    void themcuoids(dslkd *ds, node *p)
    {
    	p=ds->tail;
    	ds->tail=p;	
    }
    
    node* getnode()
    {
    	node *p;
    	p=(node*)malloc(sizeof(node));
            return p;
    }
    
    void xuatds(dslkd *ds)
    {
    	node *p;
    	p=ds->head;
    	while(p!=NULL)
    	{
    		printf("%d ",p->info);
                    p=p->next;
    	}
    }
    
    void xuatmang(int a[], int n)
    {
    	for(int i=0; i<n; i++)
    		printf("%d ",a[i]);
    }
    
    void main()
    {
    	clrscr();
    	int a[200], n;
            dslkd list;
    	printf("Hay nhap so pt cho day ");
    	scanf("%d",&n);
            randomize();
    	for(int i=0; i<n; i++)
    		a[i]=random(100)-50;
    	taodslk(&list);
    	BinaryInsertion_Sort(a,n);
    	xuatmang(a,n);
    	duadayvaods(a,n,&list);
            xuatds(&list);
    	getch();	
    }
    bài rất đơn giản tạo 1 dãy số nguyên rồi đưa nó vào dslk sao cho khi vào dslk các phần tử đã dc sắp xếp tăng dân

    em đã biên dịch thành công nhưng chạy thì nó ra thế này...
    Hay nhap so phan tu cho day 5

    -42 13 45 69 78
    ko bít mấy cái đoạn truyền tham chiếu tham trị tùm lum nó có sai ko mấy anh coi giùm em cái....

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

    Single linked list mà có head với tail ????
    Còn kq bạn đưa ra đúng là tăng dần rồi còn gì nữa??

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

    -42 13 45 69 78
    -->
    Single linked list mà có head với tail ????
    Còn kq bạn đưa ra đúng là tăng dần rồi còn gì nữa??
    Tăng chỗ nào vậy cậu ?

    Bài cậu kia thì :
    - danh sách không liên kết vì hàm add của đầu đuôi của cậu đều sai, đó là vì sao nó không in ra.
    - Cậu cấp phát dùng malloc() làm ơn dùng free() đi kèm.
    C Code:
    1. void themdau(dslkd *ds, node *p)
    2. {
    3.     p=ds->head;
    4.     ds->head=p;
    5.     if(ds->tail==NULL)
    6.             ds->tail=p;
    7. }
    - Cậu cho thằng p tạo ra trỏ tới đầu, và đầu trỏ lại, vậy next-> nó trỏ vào đâu ? Lỗi tuơng tự cho hàm add đuôi.
    Thêm đầu :
    C Code:
    1. void themdau(dslkd* ds, node* p){
    2.   if(ds->head == NULL){
    3.     ds->head = ds->tail = p;
    4.   }
    5.   else{
    6.     p->next = ds->head;
    7.     ds->head = p;
    8.   }
    9. }

    Thêm cuối :
    C Code:
    1. void themcuoids(dslkd* ds, node *p){
    2.   ds->tail->next = p;
    3.   ds->tail =  p;
    4. }
    - Cái struct không dùng tên khác thì để typedef làm gì.
    - Tui không dùng borland nên không biết cái hàm randomize đó là gì, tui dùng rand()% của C++. cậu coi đó mà sữa lại.
    C Code:
    1. #include <cstdio>
    2. #include <cstdlib>
    3.  
    4. struct node{
    5.   int info;
    6.   node *next;
    7. };
    8.  
    9. struct dslkd{
    10.   node *head, *tail;
    11. };
    12.  
    13. void taodslk(dslkd *ds);
    14. void BinaryInsertion_Sort (int a[],int n);
    15. void duadayvaods(int a[], int n, dslkd *ds);
    16. void themcuoids(dslkd *ds, node* p);
    17. node* getnode();
    18. void themdau(dslkd *ds, node* p);
    19. void xuatds(dslkd *ds);
    20. void xuatmang(int a[], int n);
    21.  
    22. void taodslk(dslkd* ds){
    23.   ds->head = NULL;
    24.   ds->tail = NULL;
    25. }
    26.  
    27. void BinaryInsertion_Sort (int a[],int n){
    28.   for (int i=1;i<n;i++){
    29.     int x=a[i],left=0,right=i-1;
    30.     while (left<=right){
    31.       int mid=(left+right)/2;
    32.       if (x<a[mid]) right=mid-1;
    33.       else             left=mid+1;
    34.     }
    35.     for (int j=i-1;j>=left;j--)
    36.       a[j+1]=a[j];
    37.     a[left]=x;
    38.   }
    39. }
    40.  
    41. void duadayvaods(int a[], int n, dslkd* ds){
    42.   node *p;
    43.   p=getnode();
    44.   p->info=a[0];
    45.   themdau(ds, p);
    46.   for(int i=1; i<n; i++){
    47.       p=getnode();
    48.       p->info=a[i];
    49.       themcuoids(ds,p);
    50.   }
    51. }
    52.  
    53. void themdau(dslkd* ds, node* p){
    54.   if(ds->head == NULL){
    55.     ds->head = ds->tail = p;
    56.   }
    57.   else{
    58.     p->next = ds->head;
    59.     ds->head = p;
    60.   }
    61. }
    62.  
    63. void themcuoids(dslkd* ds, node *p){
    64.   ds->tail->next = p;
    65.   ds->tail =  p;
    66. }
    67.  
    68. node* getnode(){
    69.   node *p;
    70.   p=(node*)malloc(sizeof(node));
    71.   return p;
    72. }
    73.  
    74. void xuatds(dslkd* ds){
    75.   printf("\n...printing dslk after sort !!!\n");
    76.   node *p;
    77.   p=ds->head;
    78.   while(p!=NULL){
    79.       printf("%d ",p->info);
    80.       p=p->next;
    81.   }
    82.   p = NULL;
    83. }
    84.  
    85. void huy_dslk(node* nut){
    86.   if(nut != NULL){
    87.     printf(" -> deleting %d \n", nut->info);
    88.     huy_dslk(nut->next);
    89.     free(nut);
    90.     nut = NULL;
    91.   }
    92. }
    93.  
    94. void xuatmang(int a[], int n){
    95.   for(int i=0; i<n; i++)       
    96.     printf("%d ",a[i]);
    97. }
    98.  
    99. int main(){
    100.   int a[200], n;
    101.   dslkd list;
    102.   printf("Hay nhap so pt cho day ");
    103.   scanf("%d",&n);
    104.   for(int i=0; i<n; i++)
    105.     a[i] = rand()%100;
    106.    
    107.   taodslk(&list);
    108.   BinaryInsertion_Sort(a,n);
    109.   xuatmang(a, n);
    110.  
    111.   duadayvaods(a,n, &list);
    112.  
    113.   xuatds(&list);
    114.   printf("\n...I'm releasing memory for my computer, I don't want memory leak...");
    115.   printf("\n...I don't have money to get a new one :( \n");
    116.   huy_dslk(list.head);
    117.   return 0;
    118. }

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    7

    cám ơn nhiều...

    Cái kết quả là nó thi hành hàm xuatmang nên phải tăng dần rồi...

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

  1. Mã nguồn C Lỗi bài tập xây dựng thuật toán trên danh sách liên kết kép bị lỗi bác nào sủa giùm em với
    Gửi bởi trongcktin13b3 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 28-03-2013, 09:23 PM
  2. Bài tập C++ Giải thích giùm mình bài tập danh sách liên kết đơn bằng lập trình hướng đối tượng
    Gửi bởi Le thi Ngoc Lan trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 09-07-2012, 11:01 PM
  3. đảo ngược vùng liên kết trong danh sách liên kết đơn
    Gửi bởi khongcochi 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: 07-07-2011, 10:18 PM
  4. Kỹ thuật C Bài tập danh sách liên kết đơn, liên kết đôi trên linux [Chia sẻ]
    Gửi bởi nmt1402 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 1
    Bài viết cuối: 24-02-2011, 08:19 PM
  5. [ Solved ]Coi giùm em cái danh sách liên kết này với!!!
    Gửi bởi Kan trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 25-10-2008, 10:13 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