鏈隊列
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
typedef int ElemType;
struct LinkNode{
ElemType data;
struct LinkNode *next;
};
typedef struct{
LinkNode *myFront,*rear;
}LinkQueue;
void InitQueue(LinkQueue &Q){
Q.myFront = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
Q.myFront->next = NULL;
}
bool IsEmpty(LinkQueue Q){
if(Q.myFront==Q.rear)
return true;
return false;
}
void EnQueue(LinkQueue &Q,ElemType x){
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
bool DeQueue(LinkQueue &Q,ElemType &x){
if(Q.myFront==Q.rear)
return false;
LinkNode *p = Q.myFront->next;
x = p->data;
Q.myFront->next = p->next;
if(Q.rear==p)
Q.rear =Q.myFront;
free(p);
return true;
}
int main()
{
LinkQueue Q;
InitQueue(Q);
EnQueue(Q,100);
int value;
DeQueue(Q,value);
printf("%d\n",value);
return 0;
}
順序隊列
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
using namespace std;
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int myFront,rear;
} SqQueue;
void InitQueue(SqQueue &Q)
{
Q.rear=Q.myFront=0;
}
bool isEmpty(SqQueue &Q)
{
if(Q.rear==Q.myFront)
return true;
return false;
}
bool EnQueue(SqQueue &Q,ElemType e)
{
if((Q.rear+1)%MaxSize==Q.myFront)
return false;
Q.data[Q.rear] = e;
// 很關鍵
Q.rear = (Q.rear+1)%MaxSize;
return true;
}
bool DeQueue(SqQueue &Q,ElemType &x)
{
if(Q.rear==Q.myFront)
return false;
x = Q.data[Q.myFront];
Q.myFront = (Q.myFront+1)%MaxSize;
return true;
}
bool GetHead(SqQueue &Q,ElemType &x)
{
if(Q.rear==Q.myFront)
return false;
else
{
x = Q.data[Q.myFront];
return true;
}
}
int main()
{
SqQueue Q;
InitQueue(Q);
EnQueue(Q,100);
EnQueue(Q,200);
int valueOne;
GetHead(Q,valueOne);
int value;
DeQueue(Q,value);
printf("%d\n",value);
return 0;
}