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.
View more random threads:
Tuy nhiên, việc thi công và bảo dưỡng đường bê tông nhựa đòi hỏi sự chuyên nghiệp và kỹ thuật cao từ các nhà thầu và kỹ sư. Sự linh hoạt và độ bền cao của đường bê tông nhựa cũng giúp giảm thiểu chi...
Xây Dựng Đẳng Cấp: Cùng Đại Thanh,...