队列的基本操作

来源:互联网 发布:js中遍历dom元素 编辑:程序博客网 时间:2024/05/21 22:32
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 50
#define ElemType int
typedef struct{
ElemType data[MAXSIZE];
int front;
int rear;
}SqQueue;                 //队列的顺序存储


//队列初始化
void Init_Queue(SqQueue&Q)
{
Q.front=Q.rear=0;
}


//队列判空
bool Empty_Queue(SqQueue Q)
{
if(Q.front==Q.rear)
{
return true;
}
else
{
return false;
}
}


//入队操作(循环队列)
bool En_Queue(SqQueue&Q,ElemType x)
{
if((Q.rear+1)%MAXSIZE==Q.front)  //从队尾入队
{
return false;
}
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MAXSIZE;
return true;
}


//出队操作
bool De_Queue(SqQueue&Q,ElemType&x)
{
if(Q.rear==Q.front)             //队空
{
return false;
}
x=Q.data[Q.front];                
Q.front=(Q.front+1)%MAXSIZE;    
return true;
}


//队列的链式结构
typedef struct{                     //链式队列结点
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct{                     //链式队列
LinkNode *front,*rear;          //队列的队头和队尾
}LinkQueue;


//初始化
void Init_LinkQueue(LinkQueue&Q)
{
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
Q.front->next=NULL;
}


//判队空
bool Empty_LinkQueue(LinkQueue Q)
{
if(Q.front==Q.rear)
{
return true;
}
else
{
return false;
}
}


//入队
void EnQueue(LinkQueue &Q,ElemType x)
{
LinkNode*s;
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
Q.rear->next=s->next;
Q.rear=s;
}


//出队
bool DeQueue(LinkQueue &Q,ElemType &x)
{
LinkNode*p;
if(Q.front==Q.rear)               
{
return false;
}
p->next=Q.front->next;            
x=p->data;
Q.front->next=p->next;
if(Q.rear==p)
{
Q.rear=Q.front;
free(p);
return true;
}
}
0 0
原创粉丝点击