两个队列一个程序

时间:2018-01-20 08:18:34

标签: c struct queue

我想在银行中创建两个普通和VIP客户端队列, 1.如何在一个程序中创建两个队列。 2.如何将队列结构作为函数入队和出列的参数传递? 我根据客户的类型征服,例如 如果客户端是vip,我会排队到queue1 如果客户端是普通的,我会排队到queue2 对于出队而言相同

#include <stdio.h>
#include <malloc.h>
#include<string.h>

int position=0;
int length=1;enter code here

typedef struct Node
{
    int record;
    int CardNum;
    char CustomerType[20];
    struct Node* next;

}Node;

//VIP QUEUE
typedef struct queue
{
    Node* front1 = NULL;
    Node* rear1 = NULL;
}Queue1;

//Ordinary QUEUE
typedef struct queue
{
    Node* front2 = NULL;
    Node* rear2 = NULL;
}Queue2;

void Enqueue();
void Dequeue();

int main()
{
    char command[10];
    while(scanf("%s",command))
    {
        if(strcmp(command,"IN") == 0)
        {
            printf("IN:");
            Enqueue();
        }
        if(strcmp(command,"LIST") == 0)
        {
            printf("LIST:\n");
            List();
        }
        if(strcmp(command,"OUT") == 0)
        {
            Dequeue();
        }
        if(strcmp(command,"QUIT") ==0)
        {
            printf("GOOD BYE!\n");
            break;
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

好吧,你创造了两种不同的Queue类型。但事实并非如此。在我们用来存储VIP的所有队列之后,将与另一个队列的类型相同。但是,您需要该队列类型的两个不同实例

此外,您无法在struct声明中初始化成员。这不会奏效。

为了将Queue传递给另一个函数,有几种方法。您只需创建Queue q1,q2,然后将其传递给函数即可分配必要的节点。

typedef struct queue
{
    Node* front;
    Node* rear;
}Queue;

Queue q1,q2;
init(&q1);
init(&q2);
...

void init(Queue *q1){
    q1->front = NULL;
    q2->rear  = NULL;
}

init的签名将是

void init(Queue *q);

无论我在init中显示的是什么,您都可以对其他队列功能执行相同的操作。

实际上你不能传递地址,然后对传递给函数的本地struct实例进行更改然后返回它。

我不能忽视的其他要点:

您已使用scanf并以一种方式检查了它的返回值 - 以正确的方式执行。

while(scanf("%9s",command) == 1){
   ...

另一点是使用具有相同条件的多个if。您应该合并if语句 - 将您从重复代码中解救出来,并且您没有进行冗余检查。

您也可以像这样初始化结构(但我已经显示了另一种方式,以便您可以编写其他队列函数)。

Queue q1 = { .front = NULL, .rear = NULL };

另一件事main的签名应该是int main(void)