队列的顺序实现
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#define MaxSize 10
typedef struct{
int front,rear;
int data[MaxSize];
}SqQueue;
void InitQueue(SqQueue &Q){
Q.front=Q.rear=0;
}
bool QueueEmpty(SqQueue Q){
if(Q.front==Q.rear) return true;
else return false;
}
bool EnQueue(SqQueue &Q,int x){
if((Q.rear+1)%MaxSize==Q.front){
return false;
}
Q.data[Q.rear]=x;
Q.rear = (Q.rear+1)%MaxSize;
return true;
}
int DeQueue(SqQueue &Q){
if(Q.front==Q.rear) return false;
int x;
x = Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
return x;
}
int GetHead(SqQueue &Q){
if(Q.front==Q.rear) return false;
int x;
x = Q.data[Q.front];
return x;
}
int CountQueue(SqQueue &Q){
if(Q.front==Q.rear) return false;
int count;
count = (Q.rear+MaxSize-Q.front)%MaxSize;
return count;
}
bool PrintSqQueue(SqQueue &Q){
if(Q.front==Q.rear) return false;
for(int i=Q.front;i<Q.rear;i++)
printf("%d ",Q.data[i]);
printf("\n");
return true;
}
int main(){
SqQueue Q;
InitQueue(Q);
printf("-----入队-----\n");
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);
EnQueue(Q,4);
EnQueue(Q,5);
int count;
count=CountQueue(Q);
printf("队内元素个数为:%d\n",count);
PrintSqQueue(Q);
printf("-----出队-----\n");
int x;
x=DeQueue(Q);
printf("%d出队\n",x);
x=DeQueue(Q);
printf("%d出队\n",x);
x=DeQueue(Q);
printf("%d出队\n",x);
count=CountQueue(Q);
printf("队内元素个数为:%d\n",count);
PrintSqQueue(Q);
return 0;
}
队列的链式实现
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
void InitQueue1(LinkQueue &Q){
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
Q.front->next=NULL;
}
void InitQueue2(LinkQueue &Q){
Q.front=NULL;
Q.rear=NULL;
}
bool IsEmpty1(LinkQueue Q){
if(Q.front==Q.rear) return true;
else return false;
}
bool IsEmpty2(LinkQueue Q){
if(Q.front==NULL) return true;
else false;
}
void EnQueue1(LinkQueue &Q,int x){
LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
void EnQueue2(LinkQueue &Q,int x){
LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
if(Q.front==NULL){
Q.front=s;
Q.rear=s;
}
else{
Q.rear->next=s;
Q.rear=s;
}
}
int DeQueue1(LinkQueue &Q){
if(Q.front==Q.rear){
return false;
}
LinkNode *p=Q.front->next;
int x;
x=p->data;
Q.front->next = p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return x ;
}
int DeQueue2(LinkQueue &Q){
if(Q.front==NULL) return false;
LinkNode *p=Q.front;
int x;
x=p->data;
Q.front=p->next;
if(Q.rear==p){
Q.front=NULL;
Q.rear=NULL;
}
free(p);
return x;
}
void PrintQueue1(LinkQueue &Q)
{
LinkNode *temp=Q.front->next;
printf("打印队列:");
while(temp)
{
printf("%d ",temp->data);
temp = temp->next;
}
printf("\n");
}
void PrintQueue2(LinkQueue &Q)
{
LinkNode *temp=Q.front;
printf("打印队列:");
while(temp)
{
printf("%d ",temp->data);
temp = temp->next;
}
printf("\n");
}
int main(){
printf("--------带头结点-------\n");
LinkQueue Q;
InitQueue1(Q);
printf("开始进队列\n");
EnQueue1(Q,1);
EnQueue1(Q,2);
EnQueue1(Q,3);
EnQueue1(Q,4);
EnQueue1(Q,5);
PrintQueue1(Q);
if (!IsEmpty1(Q)) printf("非空队列\n");
else printf("空队列\n");
int x;
x=DeQueue1(Q);
printf("%d出队列\n",x);
x=DeQueue1(Q);
printf("%d出队列\n",x);
x=DeQueue1(Q);
printf("%d出队列\n",x);
PrintQueue1(Q);
printf("--------不带头结点-------\n");
LinkQueue P;
InitQueue2(P);
printf("开始进队列\n");
EnQueue2(P,1);
EnQueue2(P,2);
EnQueue2(P,3);
EnQueue2(P,4);
EnQueue2(P,5);
PrintQueue2(P);
if (!IsEmpty2(P)) printf("非空队列\n");
else printf("空队列\n");
int y;
y=DeQueue2(P);
printf("%d出队列\n",y);
y=DeQueue2(P);
printf("%d出队列\n",y);
y=DeQueue2(P);
printf("%d出队列\n",y);
PrintQueue2(P);
return 0;
}