


//改进前
#include <stdio.h>
//入队
int enQueue(int *a,int rear,int data)
{
a[rear]=data;
rear++;
return rear;
}
void deQueue(int* a,int front,int rear)
{
//如果 front==rear,表示队列为空
while(front!=rear)
{
printf("出队元素:%d\n",a[front]);
front++;
}
}
int main()
{
int a[100];
int front;
int rear;
//设置队头指针和队尾指针,当队列中没有元素时,队头和队尾指向同一块地址
front=rear=0;
//入队
rear=enQueue(a, rear, 1);
rear=enQueue(a, rear, 2);
rear=enQueue(a, rear, 3);
rear=enQueue(a, rear, 4);
//出队
deQueue(a,front,rear);
return 0;
}
root@book-virtual-machine:/mnt/hgfs/lua/C++# g++ -std=c++11 salman_0119.cpp -o salman_0119
root@book-virtual-machine:/mnt/hgfs/lua/C++# ./salman_0119
出队元素:1
出队元素:2
出队元素:3
出队元素:4
root@book-virtual-machine:/mnt/hgfs/lua/C++#


#include <stdio.h>
#define max 7 //表示顺序表申请的空间大小
int enQueue(int* a,int front,int rear,int data)
{
//添加判断语句,如果 rear 超过 max,则直接将其从 a[0]重新开始存储,如果 rear+1 和 front 重合,则表示数组已满
if((rear+1)%max==front)
{
printf("空间已满");
return rear;
}
a[rear%max]=data;
rear++;
return rear;
}
int deQueue(int* a,int front,int rear)
{
//如果 front==rear,表示队列为空
if(front==rear%max)
{
printf("队列为空");
return front;
}
printf("%d ",a[front]);
//front 不再直接 +1,而是+1 后同 max 进行比较,如果=max,则直接跳转到 a[0]
front=(front+1)%max;
return front;
}
int main()
{
int a[max];
int front;
int rear;
//设置队头指针和队尾指针,当队列中没有元素时,队头和队尾指向同一块地址
front=rear=0;
//入队
rear=enQueue(a,front,rear, 1);
rear=enQueue(a,front,rear, 2);
rear=enQueue(a,front,rear, 3);
rear=enQueue(a,front,rear, 4);
//出队
front=deQueue(a, front, rear);
//再入队
rear=enQueue(a,front,rear, 5);
//再出队
front=deQueue(a, front, rear);
//再入队
rear=enQueue(a,front,rear, 6);
//再出队
front=deQueue(a, front, rear);
front=deQueue(a, front, rear);
front=deQueue(a, front, rear);
front=deQueue(a, front, rear);
return 0;
}