队列的顺序实现
#include <stdio.h> #include <stdlib.h> typedef int datatype; #define N 64 typedef struct sqlqueque { datatype data[N]; int front; int rear; }queue; queue * sqlqueque_create(); int sqlqueque_full(queue * Q); int sqlqueque_push(queue * Q,datatype value); int sqlqueque_empty(queue *Q); int sqlqueque_pop(queue *Q); void sqlqueque_clear(queue *Q); void sqlqueque_free(queue *Q); int main(int argc, const char *argv[]) { queue * Q = sqlqueque_create(); if(NULL == Q) { printf("函数调用失败\n"); return -1; } sqlqueque_push(Q,1); sqlqueque_push(Q,2); sqlqueque_push(Q,3); sqlqueque_push(Q,4); sqlqueque_push(Q,5); sqlqueque_pop(Q); sqlqueque_pop(Q); sqlqueque_pop(Q); sqlqueque_pop(Q); sqlqueque_pop(Q); sqlqueque_pop(Q); sqlqueque_clear(Q); sqlqueque_free(Q); return 0; } queue * sqlqueque_create() { queue * Q = (queue *)malloc(sizeof(queue)); if(Q == NULL) { printf("内存空间开辟失败\n"); return NULL; } Q->front = 0; Q->rear = 0; return Q; } int sqlqueque_push(queue * Q,datatype value) { if(sqlqueque_full(Q)) { printf("队列已满,无法继续插入\n"); return -1; } Q->data[Q->rear] = value; //对队列的尾部来说,采用这种方式进行向后走的操作,走到头之后重新回到队列data[0]位置 Q->rear = (Q->rear+1)%N; return 0; } int sqlqueque_full(queue * Q) { return (Q->rear+1)%N == Q->front; } int sqlqueque_empty(queue *Q) { return Q->front == Q->rear; } int sqlqueque_pop(queue *Q) { if(sqlqueque_empty(Q)) { printf("队列已空,无法出栈\n"); return -1; } printf("pop= %d\n",Q->data[Q->front]); Q->front = (Q->front+1)%N; return 0; } void sqlqueque_clear(queue *Q) { Q->front = Q->rear; } void sqlqueque_free(queue *Q) { free(Q); Q = NULL; }