这是实现顺序队列
使用字符数组实现
#include<stdio.h>
#include<malloc.h>
#define MaxSize 100 //MaxSize 这个常量代表100
typedef char ElemType; //用ElemType来代替char,相当于给
//char重新起一个名字,功能一样,只不过看起来更难度,正规一些
typedef struct{
ElemType data[MaxSize];
int front,rear;
}Queue;
//在这里定义了一个结构体,queue里面有两个内容一个是字符数组
//另外有两个int 的变量,分别记录头和尾
//创建队列
void Init(Queue *&q){
q=(Queue *)malloc(sizeof(Queue));
q->front=q->rear=-1;
}
void Destroy(Queue *&q){
free(q);
}
//判断是否为空
bool IsEmpty(Queue *&q){
return q->front==q->rear;
}
//入队
bool AddQueue(Queue *q,ElemType e)
{
if(q->rear==MaxSize-1)
return false;
q->rear++;
q->data[q->rear]=e;
return true;
}
//出队
bool DelQueue(Queue *&q,ElemType &e)
{
if(q->front==q->rear)
return false;
q->front++;
e=q->data[q->front];
return true;
}
int main()
{
return 0;
}
使用链表来实现队列
#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct qnode{
ElemType data;
struct qnode *next;
}QNode;
typedef struct{
QNode *front;
QNode *rear;
}Queue;
void Init(Queue *&q){
q=(Queue *)malloc(sizeof(Queue));
q->front=q->rear=NULL;
}
void Destroy(Queue *&q){
QNode *p=q->front,*r;
if(p!=NULL)
{
r=p->next;
while(r!=NULL)
{
free(p);
p=r;
r=p->next;
}
}
free(p);
free(q);
}
bool IsEmpty(Queue *q){
return q->rear==NULL;
}
void AddQueue(Queue *&q,ElemType e){
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
if (q->rear==NULL) //若链队为空,则新节点是队首节点又是队尾节点
q->front=q->rear=p;
else
{
q->rear->next=p; //将*p节点链到队尾,并将rear指向它
q->rear=p;
}
}
bool deQueue(LiQueue *&q,ElemType &e)
{
QNode *t;
if (q->rear==NULL) //队列为空
return false;
t=q->front; //t指向第一个数据节点
if (q->front==q->rear) //队列中只有一个节点时
q->front=q->rear=NULL;
else //队列中有多个节点时
q->front=q->front->next;
e=t->data;
free(t);
return true;
}