zoukankan      html  css  js  c++  java
  • C语言实现对队列的基本操作

    C语言实现对队列的基本操作

    代码思想:

    (1)定义循环队列:rear指针指向队列的最后一个元素所在位置,front指针则指向第一个元素的前一个位置。并且rear和front都只能单方向移动。
    (2)入队操作:先判断队列是否溢出->在队尾插入需要插入的元素作为新的队尾。
    (3)出队和取队头操作:判断队列是否为空->删除队头元素,并返回该元素->front+1;

    代码实现的功能:

    1.插入队列 2.取出队列 3.取出队头元素 4.判断是否为空队列 5.清空该队列

    代码内容:

    #include<stdio.h>
    #include<stdlib.h>
    typedef int boolean;
    #define true 1
    #define false 0
    typedef struct queue{
        int element[50];
        int rear;
        int front;
    }*Squeue,Queue;
    void InsQueue(Squeue q){
        int num,i=0,record=0;
        printf("请输入您想入队的元素个数:");
        scanf("%d",&num);
        for(i;i<num;i++)
        {
            printf("请输入第%d个元素:",i+1);
            if(++q->rear<=9)
            {
                if(q->rear==q->front&&record==1)
                {
                    printf("数据溢出
    ");
                    system("pause");
                    exit(1);
                }
                else if(q->rear==q->front)
                {
                    record++;
                }
                scanf("%d",&q->element[q->rear]);
            }
            else
            {
                q->rear-=10;
                scanf("%d",&q->element[q->rear]);
                if(q->rear==q->front)
                {
                    printf("数据溢出
    ");
                    system("pause");
                    exit(1);
                }
            }
        }
    }
    void DelQueue(Squeue q){
        if(IsEmpty(q)){
            printf("不存在队列
    ");
            q->front=0;
        }else{
            printf("队列为:");
            do{
                printf("%d-->",q->element[q->front]);
                q->front++;
            }while(!IsEmpty(q));
            printf("end
    ");
        }
    }
    void GetFront(Squeue q)
    {
        int i;
        if(IsEmpty(q))
            printf("不存在该队列
    ");
        else
          printf("队首元素为:%d
    ",q->element[q->front]);
    
    }
    boolean IsEmpty(Squeue q){
        if(q->rear==-1||q->front-1==q->rear)
            return true;
        else
            return false;
    }
    void EnEmpty(Squeue q){
        q->front=0;
        q->rear=-1;
        printf("sucess!
    ");
    }
    void main(){
        int input;
        Squeue q;
        q=(Squeue)malloc(sizeof(Queue));
        q->front=0;
        q->rear=-1;
        while(1)
        {
            printf("1.Insert Queue
    ");
            printf("2.Get Queue
    ");
            printf("3.Get   Front
    ");
            printf("4.IS queue empty?
    ");
            printf("5.Clear Queue
    ");
            printf("6.Exit
    ");
            scanf("%d",&input);
            switch(input)
            {
            case 1:
                InsQueue(q);
                break;
            case 2:
                DelQueue(q);
                break;
            case 3:
                GetFront(q);
                break;
            case 4:
                if(IsEmpty(q))
                    printf("不存在该队列
    ");
                else
                    printf("存在该队列
    ");
                break;
            case 5:
                EnEmpty(q);
                break;
            case 6:
                exit(0);
            default :
                    printf("input error!
    ");
                    break;
            }
        }
    }

    测试截图:
    1.插入和取出队列:
    这里写图片描述
    2.取队头元素:
    这里写图片描述
    3.判断是否为空队列:
    这里写图片描述

    博客园:https://www.cnblogs.com/newtol 微信公众号:Newtol 【转发请务必保留原作者,否则保留追责权利】
  • 相关阅读:
    C# 托管内存与非托管内存之间的转换
    A*算法详解链接
    【转】使用minizip解压缩多个文件(基于zlib)
    lua中table的遍历,以及删除
    clientHeight scrollHeight offsetHeight
    消息中间件(转)
    js 原型链和继承(转)
    session 和 cookie (转)
    java servlet
    redis 命令
  • 原文地址:https://www.cnblogs.com/newtol/p/10159128.html
Copyright © 2011-2022 走看看