簡體   English   中英

c中循環隊列的數據結構

[英]Data structure with circular queue in c

我發現這段代碼顯示了循環隊列的操作。 我正在試驗它以了解有關隊列如何工作的更多信息。 在這種情況下,我想更改以下實現,而不是打印數字,而是打印句子。

我試過更改數據類型,但它繼續打印數字。

有任何想法嗎?

#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" ) ;
}

為了讓您使用循環隊列來打印句子而不是數字,您需要做的就是將隊列設為 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 ) ;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM