C语言队列入门程序举例
2017-07-10 11:23
369 查看
**
程序功能
创建一个7个数据的循环队列,创建完成后立即返回排头和队尾元素指针,并返回队中元素,然后将倒数三个元素退队,退队后返回退队元素是什么,然后再返回队中元素和现在的排头和队尾指针。
源代码
C语言队列入门程序举例
**程序功能
创建一个7个数据的循环队列,创建完成后立即返回排头和队尾元素指针,并返回队中元素,然后将倒数三个元素退队,退队后返回退队元素是什么,然后再返回队中元素和现在的排头和队尾指针。
源代码
main.h
#include <stdio.h> #include <math.h> #include "Queue.h" //函数声明 void InitQueue(Queue *Q); void EnQueue(Queue *Q, int key); int DeQueue(Queue *Q); int IsQueueEmpty(Queue *Q); int IsQueueFull(Queue *Q);
Queue.h
#include <stdio.h> #include <stdlib.h> typedef struct queue { int queuesize; //数组的大小 int head, tail; //队列的头和尾下标 int *q; //数组头指针 }Queue;
main.c
#include "main.h" void main() { Queue example1,example2,*Q,*X; int i,key,size,*h,*t; Q=&example1; X=&example2; InitQueue(Q); InitQueue(X); printf("请输入七个整数\n"); for(i=0;i<7;i++) { scanf("%d",&key); EnQueue(Q,key); } //遍历队列 h=&Q->q[Q->head]; t=&Q->q[Q->tail-1]; size=(int)(fabs((double)((Q->tail)-(Q->head)))); //队列中现有的元素个数 printf("输入完成\n您创建的队列的排头指针为\n%d\n队尾指针为\n%d\n队中各元素分别为\n",h,t); if(size==0) printf("队列为空\n"); else for(i=0;i<size;i++) printf("%d\t",Q->q[(Q->head+i)%(Q->queuesize)]); //寄存其余元素 InitQueue(X); for(i=0;i<size-3;i++) EnQueue(X,DeQueue(Q)); for(i=3;i>0;i--) printf("\n退队的倒数第%d个元素为\n%d\n",i,DeQueue(Q)); //恢复原队列剩余元素 for(i=0;i<size-3;i++) EnQueue(Q,DeQueue(X)); //遍历剩余元素并输出头尾指针 h=&Q->q[Q->head]; t=&Q->q[Q->tail-1]; size=(int)(fabs((double)((Q->tail)-(Q->head)))); //队列中现有的元素个数 printf("此时队列的排头指针为\n%d\n队尾指针为\n%d\n队中剩余各元素分别为\n",h,t); if(size==0) printf("队列为空\n"); else for(i=0;i<size;i++) printf("%d\t",Q->q[(Q->head+i)%(Q->queuesize)]); }
Queue.c
void InitQueue(Queue *Q)//初始化队列 { Q->queuesize = 8; Q->q = (int *)malloc(sizeof(int) * Q->queuesize); //分配内存 Q->tail = 0; Q->head = 0; } void EnQueue(Queue *Q, int key)//入队 { int tail = (Q->tail+1) % Q->queuesize; //取余保证,当quil=queuesize-1时,再转回0 if (tail == Q->head) //此时队列没有空间 { printf("队列已满\n"); } else { Q->q[Q->tail] = key; Q->tail = tail; } } int DeQueue(Queue *Q)//退队 { int tmp; if(Q->tail == Q->head) //判断队列不为空 { tmp=0; printf("队列为空\n"); } else { tmp = Q->q[Q->head]; Q->head = (Q->head+1) % Q->queuesize; } return tmp; } int IsQueueEmpty(Queue *Q)//判断队列是否为空 { if(Q->head == Q->tail) { printf("队列为空\n"); return 0; } else { printf("队列不为空\n"); return 0; } } int IsQueueFull(Queue *Q)//判断队列是否为满 { if((Q->tail+1)% Q->queuesize == Q->head) { printf("队列已满\n"); return 0; } else { printf("队列未满\n"); return 0; } }
相关文章推荐
- 循环控制结构程序02 - 零基础入门学习C语言17
- 循环控制结构程序02 - 零基础入门学习C语言17
- 修改的 创建队列程序 C语言。 队列元素 是堆分配内存,而非指针
- 程序设计入门——C语言 习题汇总
- 使用C语言扩展Python程序的简单入门指引
- 循环控制结构程序01 - 零基础入门学习C语言16
- C语言编程入门之程序头文件的简要解析
- C++ STL入门教程(4)——stack(栈),queue(队列),priority_queue(优先队列)的使用(附完整程序代码)
- C++ STL入门教程(3)——deque(双向队列)的使用(附完整程序代码)
- C语言编程入门——程序练习(下)
- 循环控制结构程序03 - 零基础入门学习C语言18
- 循环控制结构程序06 - 零基础入门学习C语言21
- 循环控制结构程序05 - 零基础入门学习C语言20
- C++ STL入门教程(3)——deque(双向队列)的使用(附完整程序代码)
- C语言编写Socket程序---入门篇
- 循环控制结构程序03 - 零基础入门学习C语言18
- 循环控制结构程序05 - 零基础入门学习C语言20
- 循环控制结构程序06 - 零基础入门学习C语言21
- 队列实例程序(C语言)
- C语言的队列的初始化和先进先出的简洁程序