我发现这段代码显示了循环队列的操作。 我正在尝试使用它来了解有关队列如何工作的更多信息。 在这种情况下,我想改变以下实现,而不是打印数字,它将打印句子。
我已尝试更改数据类型,但会继续打印数字。
有什么想法吗?
#include <stdio.h>
#include <conio.h>
#define MAX 10
void addq ( int *, int, int *, int * ) ;
int delq ( int *, int *, int * ) ;
void display ( int * ) ;
void main( )
{
int arr[MAX] ;
int i, front, rear ;
system("cls" ) ;
/* initialise data member */
front = rear = -1 ;
for ( i = 0 ; i < MAX ; i++ )
arr[i] = 0 ;
addq ( arr, 14, &front, &rear ) ;
addq ( arr, 22, &front, &rear ) ;
addq ( arr, 13, &front, &rear ) ;
addq ( arr, -6, &front, &rear ) ;
addq ( arr, 25, &front, &rear ) ;
printf ( "\nElements in the circular queue: " ) ;
display ( arr ) ;
i = delq ( arr, &front, &rear ) ;
printf ( "Item deleted: %d", i ) ;
i = delq ( arr, &front, &rear ) ;
printf ( "\nItem deleted: %d", i ) ;
printf ( "\nElements in the circular queue after deletion: " ) ;
display ( arr ) ;
addq ( arr, 21, &front, &rear ) ;
addq ( arr, 17, &front, &rear ) ;
addq ( arr, 18, &front, &rear ) ;
addq ( arr, 9, &front, &rear ) ;
addq ( arr, 20, &front, &rear ) ;
printf ( "Elements in the circular queue after addition: " ) ;
display ( arr ) ;
addq ( arr, 32, &front, &rear ) ;
printf ( "Elements in the circular queue after addition: " ) ;
display ( arr ) ;
getch( ) ;
}
/* adds an element to the queue */
void addq ( int *arr, int item, int *pfront, int *prear )
{
if ( ( *prear == MAX - 1 && *pfront == 0 ) || ( *prear + 1 == *pfront ) )
{
printf ( "\nQueue is full." ) ;
return ;
}
if ( *prear == MAX - 1 )
*prear = 0 ;
else
( *prear )++ ;
arr[*prear] = item ;
if ( *pfront == -1 )
*pfront = 0 ;
}
/* removes an element from the queue */
int delq ( int *arr, int *pfront, int *prear )
{
int data ;
if ( *pfront == -1 )
{
printf ( "\nQueue is empty." ) ;
return NULL ;
}
data = arr[*pfront] ;
arr[*pfront] = 0 ;
if ( *pfront == *prear )
{
*pfront = -1 ;
*prear = -1 ;
}
else
{
if ( *pfront == MAX - 1 )
*pfront = 0 ;
else
( *pfront )++ ;
}
return data ;
}
/* displays element in a queue */
void display ( int * arr )
{
int i ;
printf ( "\n" ) ;
for ( i = 0 ; i < MAX ; i++ )
printf ( "%d\t", arr[i] ) ;
printf ( "\n" ) ;
}
答案 0 :(得分:0)
为了让您使用循环队列来打印句子而不是数字,您需要做的就是让队列成为2D字符矩阵。 您可以在下面的代码中看到实现:
#include <stdio.h>
#include <string.h>
#define MAX 10
/* adds an element to the queue */
void addq ( char **arr, char *item, int *pfront, int *prear )
{
if ( ( *prear == MAX - 1 && *pfront == 0 ) || ( *prear + 1 == *pfront ) )
{
printf ( "\nQueue is full." ) ;
return ;
}
if ( *prear == MAX - 1 )
*prear = 0 ;
else
( *prear )++ ;
arr[*prear] = item ;
if ( *pfront == -1 )
*pfront = 0 ;
}
/* removes an element from the queue */
char * delq ( char **arr, int *pfront, int *prear )
{
char *data ;
char *c;
if ( *pfront == -1 )
{
printf ( "\nQueue is empty." ) ;
return NULL ;
}
c = (char *)malloc(50*sizeof(char));
c = "dummy content";
data = arr[*pfront] ;
arr[*pfront] = c ;
if ( *pfront == *prear )
{
*pfront = -1 ;
*prear = -1 ;
}
else
{
if ( *pfront == MAX - 1 )
*pfront = 0 ;
else
( *pfront )++ ;
}
return data ;
}
/* displays element in a queue */
void display ( char ** arr )
{
int i ;
printf ( "\n" ) ;
for ( i = 0 ; i < MAX ; i++ )
printf ( "%s\n", arr[i] ) ;
printf ( "\nDone here\n" ) ;
}
void main( )
{
char **arr = (char **)malloc(MAX * sizeof(char *));
int i, front, rear ;
char *ch;
/* initialise data member */
front = rear = -1 ;
for ( i = 0 ; i < MAX ; i++ ) {
arr[i] = (char *)malloc(50 * sizeof(char));
arr[i] = "dummy content" ;
}
addq ( arr, "hello data 1", &front, &rear ) ;
addq ( arr, "hello data 2", &front, &rear ) ;
addq ( arr, "hello data 3", &front, &rear ) ;
addq ( arr, "hello data 4", &front, &rear ) ;
addq ( arr, "hello data 5", &front, &rear ) ;
printf ( "\nElements in the circular queue: " ) ;
display ( arr ) ;
ch = delq ( arr, &front, &rear ) ;
printf ( "Item deleted: %s", ch ) ;
ch = delq ( arr, &front, &rear ) ;
printf ( "\nItem deleted: %s", ch ) ;
printf ( "\nElements in the circular queue after deletion: " ) ;
display ( arr ) ;
addq ( arr, "hello data 6", &front, &rear ) ;
addq ( arr, "hello data 7", &front, &rear ) ;
addq ( arr, "hello data 8", &front, &rear ) ;
addq ( arr, "hello data 9", &front, &rear ) ;
addq ( arr, "hello data 10", &front, &rear ) ;
printf ( "Elements in the circular queue after addition: " ) ;
display ( arr ) ;
addq ( arr, "hello data 11", &front, &rear ) ;
printf ( "Elements in the circular queue after addition: " ) ;
display ( arr ) ;
}