C语言队列入门程序举例

来源:互联网 发布:铁岭网络招聘 编辑:程序博客网 时间:2024/06/07 09:22

**

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;    }}
原创粉丝点击