队列的实现-顺序表
声明:
#include "stdio.h" #include "stdlib.h" typedef int DataType; //队头f指出实队头元素所的位置,队尾r指出实队尾元素所的位置的下一个位置 struct SeqQueue { int MAXNUM; int f,r; DataType *q; }; typedef struct SeqQueue * PSeqQueue;
//创建一个空队 PSeqQueue createEmptyQueue_seq(int m) { PSeqQueue paqu=(PSeqQueue)malloc(sizeof(struct SeqQueue)); if (paqu!=NULL) { paqu->q=(DataType *)malloc(sizeof(DataType) * m); if(paqu->q) { paqu->MAXNUM=m; paqu->f=0; paqu->r=0; return paqu; } else { free(paqu); } } printf("out of space!! \n"); return NULL; }
//判断paqu所指的队列是否为空队列 int isEmptyQueue_seq(PSeqQueue paqu) { return (paqu->f==paqu->r); }
//入队运算,为环形队列 void enQueue_seq(PSeqQueue paqu,DataType x) { if ((paqu->r+1)% paqu->MAXNUM==paqu->f) { printf("Full queue. \n"); } else { paqu->q[paqu->r]=x; paqu->r=(paqu->r+1)%paqu->MAXNUM; } }
//出队 void deQueue_seq(PSeqQueue paqu) { if (paqu->f == paqu->r) { printf("Empty Queue. \n"); } else { paqu->f=(paqu->f+1)%paqu->MAXNUM; } }
//取队列的头元素 DataType frontQueue_seq(PSeqQueue paqu) { if (paqu->f == paqu->r) { printf("Empty Queue. \n"); } else { return (paqu->q[paqu->f]); } }
测试:
int main(int argv,char * argm[]) { PSeqQueue paqu; paqu=createEmptyQueue_seq(30); paqu->MAXNUM=30; enQueue_seq(paqu,10); enQueue_seq(paqu,30); enQueue_seq(paqu,32); enQueue_seq(paqu,3); enQueue_seq(paqu,5); enQueue_seq(paqu,8); printf("%d \n",paqu->f); printf("%d \n",paqu->r); printf("队头元素:%d \n",paqu->q[paqu->f]); printf("队尾元素:%d \n",paqu->q[paqu->r-1]); deQueue_seq(paqu); printf("%d \n",paqu->f); printf("%d \n",paqu->r); printf("队头元素:%d \n",paqu->q[paqu->f]); printf("队尾元素:%d \n",paqu->q[paqu->r-1]); }
运行结果如下:

浙公网安备 33010602011771号