zoukankan      html  css  js  c++  java
  • 循环队列子系统

    上数据结构课的时候老师让写了一个循环队列子系统。

    代码如下:


    #include<stdio.h>
    #include<malloc.h>
    #define MAXLEN 100
    #define datatype char
    
    typedef struct          //循环队列结构体
    {
        datatype data[MAXLEN];
        int rear,front,n;		//rear对尾位置,front队首位置,n队列中元素个数;
    } csequeue;
    csequeue *line;				//一个csequeue类型的指针;
    void inqueue()      //进队;
    {
        char x;
        if(line==NULL)			//如果指针为空
        {
            line=(csequeue*)malloc(sizeof(csequeue));	//创建一个结构体
            line->rear=line->front=1;					//对rear,front,n初始化,==1可以是一个在MAXLEN范围内的任意值
            line->n=0;
        }
        printf("	请输入进队元素:");
        scanf(" %c",&x);
        if(line->front ==(line->rear + 1) % MAXLEN)		//判断队满,原理:队尾元素加1等于队首元素的时候判定为队满
        {
            printf("	队满,进队失败!");
            return ;
        }
        line->rear=(line->rear+1)% MAXLEN;				//队尾标记加一
        line->data[line->rear]=x;						//给队尾元素赋值
        line->n++;										//队列长度加一
        printf("	进队成功!!");
    }
    void dequeue ()     //出队 
    {
        if(line==NULL||line->rear==line->front)			//判断,如果指针为空,或者队空的情况;
        {
            printf("	队空,出队失败!");
            return ;
        }
        line->front=(line->front+1)%MAXLEN;				//因为front所指位置元素不属于队列,所以先加后输出
        printf("	出队元素为:%c",line->data[line->front]);
        line->n--;
    }
    void showqueue ()       //显示队列;
    {
        int i;
        if(line==NULL||line->rear==line->front)
        {
            printf("	队空!!!!");
            return ;
        }
        i=line->front;
        printf("	队列元素为:");
        while(i!=line->rear)							//当标记变量i不等于队尾位置时,line->data中(i+1)%MAXLEN元素,因为一开始front所指元素不属于队列
        {
            printf(" %c",line->data[(i+1)%MAXLEN]);
            i=(i+1)%MAXLEN;				//对MAXLEN取余使得i的值始终在零到MAXLEN范围内;
        }
    }
    void queuelength()      //显示队列长度;
    {
        if(line==NULL)
        {
            printf("	无队,请先创建队!");
            return ;
        }
        printf("	队列长度为:%d",line->n);
    }
    void returnn()
    {
        free(line);			//释放队列==释放空间;
        return ;
    }
    int main ()
    {
        int m=1;
        printf("			----循环队列子系统c实现----
    
    ");
        while(m!=0)
        {
            printf("
    		******************************************
    ");
            printf("		*               指令说明                 *
    ");
            printf("		*             1----进    队              *
    ");
            printf("		*             2----出    队              *
    ");
            printf("		*             3----显    示              *
    ");
            printf("		*             4----队列长度              *
    ");
            printf("		*             0----返    回              *
    ");
            printf("		******************************************
    
    ");
            printf("	请输入指令:");
            scanf(" %d",&m);
            switch(m)
            {
            case 1:
                inqueue();
                break;
            case 2:
                dequeue();
                break;
            case 3:
                showqueue();
                break;
            case 4:
                queuelength();
                break;
            case 0:
                returnn();
                return 0;
            default :
                printf("	输入有误!请重新输入~
    
    ");
                break;
            }
        }
        return 0;
    }





  • 相关阅读:
    第二次博客作业
    C博客作业00--我的第一篇博客
    第1次任务:购物车程序的面向对象设计
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    C博客作业05-指针
    C博客作业04--数组
    C博客作业03--函数
  • 原文地址:https://www.cnblogs.com/lanaiwanqi/p/6684494.html
Copyright © 2011-2022 走看看