- 前面使用单个数组随机访问的方式实现了多重栈的基本操作,这里通过来两个数组来随机访问实现多重队列;
- 这里需要两个数组,因为队列需要添加元素和删除元素在不同的一端
QueueNode front[MAX_SIZE] = {NULL}, rear[MAX_SIZE] = {NULL};
- 首先是队列添加元素的操作:
void QueueAddq(int i, element item)
{
QueueNode temp;;
temp = (QueueNode)malloc(sizeof(QueueNode));
if (temp == NULL)
{
fprintf(stderr, "malloc error\n");
exit(EXIT_FAILURE);
}
temp->data = item;
temp->link = NULL;
if (front[i])
rear[i]->link = temp;
else
front[i] = temp;
rear[i] = temp;
}
element QueueDelete(int i)
{
QueueNode temp = front[i];
element item;
if (!temp)
exit(EXIT_FAILURE);
item = temp->data;
front[i] = temp->link;
free(temp);
return item;
}
void QueuePrintf(int i)
{
if (i < 0 || i > MAX_SIZE)
{
fprintf(stderr, "The number out of range\n");
exit(EXIT_FAILURE);
}
printf("The Stack[%d] Contains:\n", i);
QueueNode temp = front[i];
while (temp != NULL)
{
if (temp->link == NULL)
{
printf("[%d]", temp->data.key);
}
else
printf("[%d]-->", temp->data.key);
temp = temp->link;
}
printf("\n");
}
typedef struct
{
int key;
} element;
typedef struct node *QueueNode;
struct node
{
element data;
QueueNode link;
};
QueueNode front[MAX_SIZE] = {NULL}, rear[MAX_SIZE] = {NULL};
void QueueAddq(int i, element item)
{
QueueNode temp;;
temp = (QueueNode)malloc(sizeof(QueueNode));
if (temp == NULL)
{
fprintf(stderr, "malloc error\n");
exit(EXIT_FAILURE);
}
temp->data = item;
temp->link = NULL;
if (front[i])
rear[i]->link = temp;
else
front[i] = temp;
rear[i] = temp;
}
element QueueDelete(int i)
{
QueueNode temp = front[i];
element item;
if (!temp)
exit(EXIT_FAILURE);
item = temp->data;
front[i] = temp->link;
free(temp);
return item;
}
void QueuePrintf(int i)
{
if (i < 0 || i > MAX_SIZE)
{
fprintf(stderr, "The number out of range\n");
exit(EXIT_FAILURE);
}
printf("The Stack[%d] Contains:\n", i);
QueueNode temp = front[i];
while (temp != NULL)
{
if (temp->link == NULL)
{
printf("[%d]", temp->data.key);
}
else
printf("[%d]-->", temp->data.key);
temp = temp->link;
}
printf("\n");
}
int main(){
element item;
item.key=10;
int num=1;
QueueAddq(num,item);
item.key=9;
QueueAddq(num,item);
item.key=8;
QueueAddq(num,item);
item.key=7;
QueueAddq(num,item);
QueuePrintf(num);
num=2;
QueueAddq(num,item);
item.key=9;
QueueAddq(num,item);
item.key=8;
QueueAddq(num,item);
item.key=7;
QueueAddq(num,item);
QueuePrintf(num);
return 0;
}
- 程序运行的结果
![这里写图片描述](https://img-blog.csdn.net/20171109193954903?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzYyOTQ4NzU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)