资源描述
/-循环队列队列的顺序存储结构-#include#include#include /exit的头文件#define OK 1#define ERROR 0#define MAXQSIZE 100/最大队列长度#define Status int#define N 10#define QElemType inttypedef structQElemType *base;/初始化的动态分配存储空间int front; /头指针,若队列不空,指向队列头元素int rear; /尾指针,若队列不空,指向队列队尾元素的下一位置SqQueue;/-循环队列的基本操作的算法描述-Status InitQueue(SqQueue &Q)/构造一个空队列Q.base=(QElemType *)malloc(MAXQSIZE * sizeof(QElemType);if(!Q.base)exit(-1);/存储分配失败Q.front=Q.rear=0;return OK;int QueueLength(SqQueue Q)/返回Q的元素个数,即队列的长度return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;Status EnQueue(SqQueue &Q,QElemType e)/插入元素e为Q的新的队尾元素if(Q.rear+1)%MAXQSIZE=Q.front) return ERROR;/队列满Q.baseQ.rear=e;Q.rear=(Q.rear+1)%MAXQSIZE;return OK;Status DeQueue(SqQueue &Q,QElemType &e)/若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;/否则返回ERRORif(Q.front=Q.rear) return ERROR;e=Q.baseQ.front;Q.front=(Q.front+1)%MAXQSIZE;return OK;Status GetHead(SqQueue &Q,QElemType &e)/若队列不空,则用e返回Q的队头元素,并返回OK;/否则返回ERRORif(Q.front=Q.rear) return ERROR;e=Q.baseQ.front;return OK;/-打印杨辉三角(前N行)-void YangHuiTriangle()int i,n,temp,x;SqQueue Q;InitQueue(Q);EnQueue(Q,1); /第一行元素入队for(n=2;n=N;n+) /产生第n行元素并入队,同时打印第n-1行的元素EnQueue(Q,1); /第n行的第一个元素入队for(i=1;i=n-2;i+) /利用队中第n-1行元素产生第n行的中间n-2个元素并入队DeQueue(Q,temp);printf(%d,temp); /打印第n-1行的元素GetHead(Q,x);temp=temp+x; /利用队中第n-1行元素产生第n行元素EnQueue(Q,temp);/forDeQueue(Q,x);printf(%d,x); /打印第n-1行的最后一个元素EnQueue(Q,1); /第n行的最后一个元素入队printf(n);/for/YangHuiTriangle void main() YangHuiTriangle();
展开阅读全文