标签:
#include <stdio.h> #include <malloc.h> #include <stdlib.h> #define MAXQSIZE 5 //最大队列长度 typedef struct SqQueue { int * base; int front; //队头指针 若队列不空 指向队列头元素 int rear; //尾指针 若队列不空 指向队列尾元素的下一个位置 }SqQueue; bool InitQueue(SqQueue *q); //队列的初始化 void QueueEmpty(SqQueue q); // 判断队列是否为空 int QueueLength(SqQueue q); //求队列的长度 bool EnQueue(SqQueue *q,int e); //入队 bool QueueTraverse(SqQueue *q); //输出队列元素 址传递 //bool QueueTraverse(SqQueue q); //输出队列元素 值传递 两种输出方式均可 bool DeQueue(SqQueue *q,int *e); //删除队头元素 用e返回 bool GetHead(SqQueue q,int *e); //返回队头元素 bool ClearQueue(SqQueue *q); //清空队列 bool DestoryQueue(SqQueue *q); //销毁队列 int main() //主函数 { int i, n; int d; SqQueue q; InitQueue(&q); QueueEmpty(q); printf("队列的长度:%d\n",QueueLength(q)); printf("请输入队列元素个数:"); scanf("%d",&n); for(i = 0; i < n; i++) { scanf("%d",&d); EnQueue(&q,d); } printf("队列的长度:%d\n",QueueLength(q)); QueueEmpty(q); printf("现在队列中的元素:\n"); QueueTraverse(&q); //QueueTraverse(q); DeQueue(&q,&d); printf("删除的队头元素为 %d\n",d); printf("队列中的元素:\n"); QueueTraverse(&q); if( GetHead(q,&d) ) printf("队头元素为:%d\n",d); else printf("队头元素为空\n"); ClearQueue(&q); QueueEmpty(q); if( GetHead(q,&d) ) printf("队头元素为:%d\n",d); else printf("无队头元素\n"); DestoryQueue(&q); return 0; } bool InitQueue(SqQueue *q) //队列的初始化 { q->base = (int *)malloc(MAXQSIZE*sizeof(int)); if(q->base == NULL) { printf("内存分配失败 程序终止"); exit(-1); } q->front = q->rear = 0; return true; } void QueueEmpty(SqQueue q) // 判断队列是否为空 { if(q.front == q.rear) //队列空 printf("队列为空\n"); else printf("队列不为空\n"); } int QueueLength(SqQueue q) //求队列的长度 { return (q.rear - q.front); } bool EnQueue(SqQueue *q,int e) //入队 { if(q->rear >= MAXQSIZE) //队列满 增加一个存储单元 { q->base = (int *)realloc(q->base,(q->rear+1)*sizeof(int)); if(q->base == NULL) { printf("内存分配失败 程序终止\n"); exit(-1); } } *(q->base + q->rear) = e; q->rear++; return true; } bool QueueTraverse(SqQueue *q) //输出队列元素 { int i; i = q->front; while(i != q->rear) { printf("%d ",q->base[i]); i++; } printf("\n"); return true; } /* bool QueueTraverse(SqQueue q) { int i; i = q.front; while(i != q.rear) { printf("%d ",q.base[i]); i++; } printf("\n"); return true; } */ bool DeQueue(SqQueue *q,int *e) //删除队头元素 用e返回 { if(q->front == q->rear) //队列为空 return false; *e = q->base[q->front]; q->front = q->front + 1; return true; } bool GetHead(SqQueue q,int *e) //返回队头元素 { if(q.rear == q.front) { return false; } *e = q.base[q.front]; return true; } bool ClearQueue(SqQueue *q) //清空队列 { q->front = q->rear = 0; return true; } bool DestoryQueue(SqQueue *q) //销毁队列 { if(q->base) free(q->base); q->base = NULL; q->front = q->rear = 0; return true; }
标签:
原文地址:http://blog.csdn.net/qq_26883101/article/details/51371551