数组队列的实现
#include<stdio.h>
#define N 20
struct queue
{
int data[N];
int front;
int rear;
int size;
};
void push(struct queue *qp, int dat)
{
if(qp->size >= N)
{
printf("queue is full\n");
return;
}
qp->rear++;
qp->rear = qp->rear % N;
qp->data[qp->rear] = dat;
qp->size++;
}
void print(struct queue *qp)
{
int i;
int start = qp->front;
for(i = 0; i < qp->size; i++)
{
printf("%d ",qp->data[start++]); //输出之后再++
start = start % N;
}
printf("\n");
}
int pop(struct queue *qp)
{
if(qp->size == 0)
{
printf("the queue is empty!");
return -1;
}
int dat = qp->data[qp->front];
qp->front++;
qp->front = qp->front % N;
qp->size--;
return dat;
}
int main()
{
struct queue queue1;
queue1.front = 0;
queue1.rear = -1;
queue1.size = 0;
int i;
for(i = 0; i < 20; i++)
{
push(&queue1, i);
}
printf("%d\n",pop(&queue1));
//pop(&queue1);
push(&queue1, 21);
push(&queue1, 22);
print(&queue1);
return 0;
}
链式队列的实现:
#include<stdio.h>
#include<stdlib.h>
struct Node
{
int value;
struct Node *next;
};
struct queue
{
struct Node *front;
struct Node *rear;
int size;
};
struct Node *createNode(int value)
{
struct Node *newnode;
newnode = (struct Node *)malloc(sizeof(struct Node));
if(newnode == NULL)
{
return NULL;
}
newnode->next = NULL;
newnode->value = value;
return newnode;
}
void push(struct queue *qp,int dat)
{
struct Node *ptr = createNode(dat);
if(ptr == NULL)
{
printf("create error\n");
return ;
}
if(qp->size == 0)
{
qp->front = ptr;
qp->rear = ptr;
}else{
qp->rear->next = ptr;
qp->rear = ptr;
}
qp->size++;
}
int pop(struct queue *qp)
{
if(qp->size == 0)
{
printf("empty\n");
return -1;
}
struct Node *ptr = qp->front;
qp->front = ptr->next;
qp->size--;
int dat = ptr->value;
free(ptr);
return dat;
}
void print(struct queue *qp)
{
int i = qp->size;
struct Node *ptr = qp->front;
while(i != 0)
{
printf("%d",ptr->value);
i--;
ptr = ptr->next;
}
printf("\n");
}
int main()
{
struct queue queue1 = {NULL, NULL, 0};
int i;
for(i = 1;i < 10; i++)
{
push(&queue1,i);
}
print(&queue1);
printf("%d\n",pop(&queue1));
print(&queue1);
return 0;
}