代码-队列

#include <stdio.h>
#include "malloc.h"
#define MAXQSIZE 10
#define QueueSize 100
typedef int QElemType;
typedef struct {
    QElemType *base;//队元素数组
    int front;
    int rear;
}SqQueue;
typedef int Datatype ; //设元素的类型为int型
 typedef struct {
    int quelen;
    int rear;
    Datatype *data;
    }CirQueue;

        int InitQueue(SqQueue *Q)
        {
        printf("初始化队列中。。。\n");
        Q->base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));
        if(Q->base)
        {
        printf("初始化成功!\n");
        Q->front=Q->rear=0;
        return 1;
        }
        else
        {	printf("初始化失败!");
        return 0;
        }
}

int InitQueue1(CirQueue *Q)
{
    printf("初始化队列中。。。\n");
    Q->data=(Datatype *)malloc(QueueSize*sizeof(Datatype));
    if(Q->data)
    {
        printf("初始化成功!\n");
        Q->quelen=Q->rear=0;
        return 1;
    }
    else
    {	printf("初始化失败!");
        return 0;
    }

}

void MenuList() {
    printf("\n\n**************************\n");
    printf("  1  -------  初始化队列\n");
    printf("  2  -------  生成队列\n");
    printf("  3  -------  入队列\n");
    printf("  4  -------  出队列 \n");
    printf("  5  ------- 打印队头元素 \n");
    printf("  6  ------- 退出 \n");
    printf("  7  ------- 求队列中的元素个数 \n");
    printf("  8  ------- 不设头指针的入队 \n");
    printf("  9  ------- 不设头指针的出队 \n");
    printf("  10  ------- 非递归求最大公因数 \n");
    printf("  11  ------- 递归求最大公因数 \n");
    printf("**************************\n");
}

void InitQ(SqQueue *Q)
    { int i,k,m;
    printf("请输入队列中的元素个数(不大于10个):");
    scanf("%d",&k);
    for (i=0;i<k;i++)
    {
        printf("请输入队列中的第%d个元素:",i+1);
        scanf("%d",&m);
        Q->base[Q->rear]=m;
        printf("入队的元素为:%d\n",Q->base[Q->rear]);
        Q->rear=(Q->rear+1)%MAXQSIZE;
        //printf("%d",Q->rear);
        //printf("%d",Q->front);
    }
}

void DeQueue(SqQueue *Q)//出队
            { int e;
            if(Q->front==Q->rear)
            printf("队列为空,不能出队!");
            else
            {
            e=Q->base[Q->front];
            Q->front=(Q->front+1)%MAXQSIZE;//队头指针始终指向出队元素的下一位置
            printf("出队元素为:%d\n",e);
            }
            }
int EnQueue(SqQueue *Q){//入队
            int e;
                printf("请输入入队元素的值:");
                scanf("%d",&e);
            if((Q->rear+1)%MAXQSIZE == Q->front){//预留一位法
                printf("队列已满!");
                return 0;
            }
    Q->base[Q->rear]=e;  //插入x值到队尾
    Q->rear=(Q->rear+1)%MAXQSIZE;  //队尾指针循环后移,队尾指针始终指向最后一个元素的下一位置
    return  1 ;
}
int QueueLength(SqQueue *Q)
{
    return (Q->rear-Q->front+MAXQSIZE)%MAXQSIZE;
}
                int QueueVisit(SqQueue *Q)
                {
                    int e;
                    if ( Q->rear== Q->front )  return 0 ; //队空
                    e=Q->base[Q->front] ;  //e值带回出队元素的值
                    Q->front=(Q->front+1)%MAXQSIZE; //队头指针循环后移
                    return e ;

                }

int FullQueue( CirQueue *Q)
    {//判队满,队中元素个数等于空间大小
    return Q->quelen== QueueSize;
    }
    void EnQueue1( CirQueue *Q, Datatype x)
            {// 入队
            if(FullQueue(Q))
            printf("队已满,无法入队");
            Q->data[Q->rear]=x;
            Q->rear=(Q->rear+1)%QueueSize;//在循环意义上的加1
            Q->quelen++;
            }
Datatype DeQueue1( CirQueue *Q)
            {//出队
            if(Q->quelen==0)
            printf("队已空,无元素可出队");
            int tmpfront; //设一个临时队头指针
            tmpfront=(QueueSize+Q->rear - Q->quelen)%QueueSize;//计算头指针位置
            Q->quelen--;
            return Q->data[tmpfront];
            }
int fun1(int m, int n)//非递归
{
    int temp;
    while (1)
    {
        if (m < n)
        {
            temp = m;
            m = n;
            n = temp;
        }

        if (n == 0)
        {
            return m;
        }
        else
        {
            int r = m % n;
            m = n;
            n = r;
        }
    }
}
int fun2(int m, int n)//递归
{
    if (n == 0)
    {
        return m;
    }
    if (m < n)
    {
        return fun2(n, m);//m,n交换位置
    }

    return fun2(n, m % n);
}

void main() {
    int s, m = 0, f,a,b;
    SqQueue q;
    CirQueue Q;
    InitQueue1(&Q);
    while (m != 100) {
        MenuList();
        printf("请输入选择:");
        scanf("%d", &m);
        if (m == 1)
            s = InitQueue(&q);
        if (m == 2) {
            if (s == 0) { printf(" 初始化队列失败,不能生成队列!\n"); }
            else
                InitQ(&q);
        }
        if (m == 3) EnQueue(&q);
        if(m==4)
            DeQueue(&q);
        if (m == 5) {
            f = QueueVisit(&q);
            printf("队头元素为:%d", f);
        }
        if (m == 8) {
            printf("请输入入队的值:");
            scanf("%d", &f);
            EnQueue1(&Q, f);
        }
        if (m == 7) {
            f=QueueLength(&q);
            printf("队列中元素的个数为:%d",f);
        }
        if (m == 9) {
            f = DeQueue1(&Q);
            printf("出队的元素为:%d", f);
        }
        if(m==10){
            printf("请输入两个数:");
            scanf("%d,%d",&a,&b);
            f=fun1(a,b);
            printf("%d和%d的最大公因数为:%d",a,b,f);
        }

        if(m==11){

            printf("请输入两个数:");
            scanf("%d,%d",&a,&b);
            f=fun2(a,b);
            printf("%d和%d的最大公因数为:%d",a,b,f);

        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的锦鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值