我想在银行中创建两个普通和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;
}
答案 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)
。