您的位置:首页 > 理论基础 > 数据结构算法

数据结构之队列的顺序实现

2015-08-23 14:41 721 查看


/*
实现功能:用顺序表实现队列的各种操作
编译环境:Windows 64b,vc6.0
日期: 2015/7/20
作者: wtt561111
*/
#define queue_max_num 10
#include "stdio.h"
#include "stdlib.h"
typedef struct SeqQueue *PSeqQueue;
struct SeqQueue {
int MAXNUM;//顺序队列中最大元素个数
int f,r;//front rear队头,队尾。队头出,队尾入。
int *q;
};

/*
创建一个空的列表,长度为m。
*/
PSeqQueue createEmptyQueue_seq(int m){

PSeqQueue paque=(PSeqQueue)malloc( sizeof(struct SeqQueue) );
if(paque==NULL){
printf("out of space!\n");
return NULL;
}
paque->q=(int *)malloc( sizeof(int)*m );
if(paque->q==NULL){
printf("out of space!\n");
return NULL;
}

paque->MAXNUM=m;
paque->f=0;
paque->r=0;
return paque;

}
/*****************************************************/

/*
判断一个队列是否为空,为空返回1,否则返回0。
*/
int isEmptyQueue_seq(PSeqQueue paque){

if(paque->f==0 && paque->r==0)
return 1;
return 0;

}
/*****************************************************/

/*
将x存入队列中,成功返回1,否则返回0。
*/
int enQueue_seq(PSeqQueue paque,int x){

if( ( (paque->r)+1 ) % (paque->MAXNUM) == paque->f ){//将一个顺序表当做环形来使用
//为了区别慢和空,舍弃一个单元不用
printf("overflow!\n");
return 0;
}
paque->q[paque->r]=x;
paque->r= ( (paque->r)+1 ) % paque->MAXNUM; //环形操作
//入列是rear变化,出列是front变化
return 1;

}
/*****************************************************/

/*
将队头元素出列,成功返回1,否则返回0。
*/
int deQueue_seq(PSeqQueue paque){

if(paque->f==0 && paque->r==0){
printf("empty\n");
return 0;
}
paque->f= ( (paque->f)+1 ) % paque->MAXNUM;
return 1;

}
/*****************************************************/

/********************主函数***************************/
int main(){

PSeqQueue paque_get=createEmptyQueue_seq(queue_max_num);

enQueue_seq(paque_get,110);
enQueue_seq(paque_get,111);
enQueue_seq(paque_get,112);
enQueue_seq(paque_get,113);
enQueue_seq(paque_get,114);
enQueue_seq(paque_get,115);
enQueue_seq(paque_get,116);
enQueue_seq(paque_get,117);
enQueue_seq(paque_get,118);

deQueue_seq(paque_get);
enQueue_seq(paque_get,120);
enQueue_seq(paque_get,121);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息