Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Cấu trúc dữ liệu ring buffer

    Mã:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>
    int N, in, out, num_e;
    void **table;
    
    void fifodestroy();
    int fifoempty();
    int fifoput(void *next);
    void fifoinit (int size);
    
    /*init queue*/
    void fifoinit (int size)
    {
       num_e=0; in=0;out=0;
       N=size;
       printf("fifo init
    ");
    
       table=(void**)malloc(N*sizeof(void*));
    }
    
    /*free memmory*/
    void fifodestroy() 
    {
       int i;
       if(!fifoempty()) 
    	   free(table);
       else
       {
            for(i=out;i<in;i++)
    		{
                free(table[i]);
            }
            free(table);
       }
    }
    /*empty queue = 1 else 0*/
    int fifoempty() 
    {
       return(num_e==0);
    }
      
    /*insert element*/
    int fifoput(void *next) 
    {
       if(num_e == N) 
    	   return(0);
       else 
       {
           table[in] = next;
           num_e++;
           in=(in+1)%N;
           return(1);
       }   
    }
    
    int main(int argc,char* argv[]) 
    {
       int y = 1;
       char *p, str[64];
       printf(" Give an integer for size: ");
       scanf("%d", &y);
       fifoinit(y); /*init fifo*/
    
       do
       {
    	   putchar('
    ');
    	   printf(" 0: Exit
    ");
    	   printf(" 1: Insert string
    ");
    	   printf(" 2: Print next string
    ");
    	   printf(" Choose one of the above options:  ");
    	   scanf("%d",&y);
    	   switch (y) 
    	   {
    		   case 1 : 
    			   {
    				   printf(" Insert elements
    
    ");
    				   printf(" Give string ");
    				   scanf("%s",str);
    				   p=strdup(str);
    				   if (!(fifoput((void*) p))) 
    				   {
    					  free(p);
    					  printf(" Table is full
    ");
    				   }
    				   else 
    				   {
    					   printf(" Insert successful
    "); 
    				   }   
    				   break;
    			   } 
    			case 2:
    				{
    					printf("Get elements
    
    ");
    					break;
    				}
    	   }   
    	}while(y!=0);
    
       fifodestroy();
    //   exit(0);
    }
    Cấu trúc dữ liệu ring buffer như sau: table là 1 bảng chứa các con trỏ chuỗi, số phần
    tử sẽ tăng dần khi có 1 thao tác put chuỗi vào table, ngược lại khi có 1 thao tác get,
    số phần tử sẽ giảm dần:
    - Đoạn code trên hiện giờ chỉ hiện thực được thao tác insert một phần tử (hàm
    fifoput(void *next)) vào table của ring buffer. Bạn nào giúp mình thao tác get
    (hàm fifoget()) trả về một chuỗi string là một phần tử trong table.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    up ai giúp với nào

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •