我需要这个队列来显示学生ID以及名称我该如何解决这个问题?

时间:2013-12-06 16:29:25

标签: c queue structure

所以我正在创建一个程序,它将在队列中显示学生的ID以及他们的名字。我终于让它显示用户名,但我也需要显示ID。我害怕开始乱搞,弄乱一切。有人告诉我通往光明的道路;)。

编辑:感谢Paul R指出这一点。直到现在我才意识到我一次只能为学生的名字显示一个字母,我在这里做错了什么?

#include <stdio.h>
#include <stdlib.h>

struct queueNode
{
    int data1; 
    char data;
    struct queueNode *nextPtr;
};

typedef struct queueNode QueueNode;
typedef QueueNode *QueueNodePtr;

void printQueue (QueueNodePtr currentPtr);
int isEmpty (QueueNodePtr headPtr);
char dequeue (QueueNodePtr *headPtr, QueueNodePtr *tailPtr);
void enqueue (QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char value);
void instructions (void);

int main (void)
{
    QueueNodePtr headPtr=NULL;
    QueueNodePtr tailPtr=NULL;
    int choice;
    char name;
    int ID;

    instructions();
    printf("?");
    scanf("%d",&choice);

    while(choice !=3)
    {
        switch(choice)
        {
            case 1:
            printf("Enter ID: ");
            scanf("\n%d", &ID);
            printf("Enter Name: ");
            scanf("\n%c", &name);
            //RETURN HERE TO ENTER LAST NAME
            enqueue(&headPtr, &tailPtr, ID);
            enqueue(&headPtr, &tailPtr, name);
            printQueue(headPtr);
            break;
        case 2:
            if (!isEmpty(headPtr))
            {
            ID=dequeue(&headPtr, &tailPtr);
            name=dequeue(&headPtr, &tailPtr);
            printf("%d %c has been dequeued.\n", ID, name);
            }

            printQueue(headPtr);
            break;
        default:
            printf("Invalid choice.\n\n");
            instructions();
            break;
        }
    printf("?");
    scanf("%d", &choice);
    }
    printf("End of Run\n");
    return 0;
} 

void instructions(void)
{
printf("Enter your choice: \n"
            "1 to add to queue\n"
            "2 to remove from queue\n"
            "3 to exit\n");
}
void enqueue (QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char value)
{
    QueueNodePtr newPtr;

    newPtr=malloc(sizeof(QueueNode));

    if(newPtr!=NULL)
    {
        newPtr->data = value;
        newPtr->nextPtr = NULL;

        if(isEmpty (*headPtr))
        {
            *headPtr=newPtr;
        }
        else
        {
            (*tailPtr)->nextPtr=newPtr;
        }
        *tailPtr=newPtr;
    }
    else
    {
        printf("%c not inserted. No memory available.\n", value);
    }
}

char dequeue (QueueNodePtr *headPtr, QueueNodePtr *tailPtr)
{
    char value;
    QueueNodePtr tempPtr;

    value = (*headPtr)->data;
    tempPtr = *headPtr;
    *headPtr = (*headPtr)->nextPtr;

    if(*headPtr==NULL)
    {
    *tailPtr = NULL;
    }

    free(tempPtr);
    return value;
}

int isEmpty(QueueNodePtr headPtr)
{
    return headPtr==NULL;
}

void printQueue (QueueNodePtr currentPtr)
{
    if(currentPtr==NULL)
    {
    printf("Queue is empty. \n\n");
    }
    else
    {
    printf("The Queue is: \n");

    while(currentPtr !=NULL)
    {
        printf("%c --> ", currentPtr ->data);
        currentPtr = currentPtr->nextPtr;
    }
    printf("NULL\n\n");
    }
}

1 个答案:

答案 0 :(得分:1)

而不是char data;(单个字符),例如char data[80];(一个char数组,又名 string )。同上char name;。您需要使用strcpy之类的字符串函数来复制struct data字段和临时变量name之间的字符串。