zoukankan      html  css  js  c++  java
  • 队列

    //用数组结构实现队列
    # include<stdio.h>
    #include<stdlib.h>
    #define maxsize 10 //数组大小不能是变量,必须宏定义或者写进去
    typedef struct
    {
        int que[maxsize];
        int tail,head;//数组实际存储的头下标和尾下标
        int *q;
    } QUEUE;
    QUEUE initialize(QUEUE queue)//队列初始化 ????为什么成指针类型了,已会
    {
        queue.tail=queue.head=0;
        queue.q=(int*)malloc(sizeof(int)*maxsize);
        return (queue);
    }//刚开始在这块把结构体指针变量和结构体一般变量搞混了,
     //结构体指针变量是p1->q这个结构,结构体一般变量就是p1.q就好了
    int show(QUEUE* queue)//显示队列
    {
        int i;
        if(queue->head==queue->tail)
           {
               printf("该队列为空\n");
               return;
           }
    
        for(i=(queue->head+1)%maxsize;i<=queue->tail;i=(i+1)%maxsize)
        //由于43,44行的原因,此处head要+1
            printf("queue->que[%d]=%d\n",i,queue->que[i]);
        printf("\nQueue head is %d\n",queue->head);
        printf("Queue tail is %d\n\n",queue->tail);
    }
    int inqueue(QUEUE* queue,int x)//元素进队列
    {
        if(((queue->tail+1)%maxsize)==queue->head)//此处舍弃了一个存储空间,因为若
                  //不舍弃,空和满的判断条件就一样,分辨不出来
                  //也不能少申请一个空间,因为是循环队列
                //也不能让head指向当前第一个数据,因为无法区分存放了一个数据还是空
          {
                printf("The queue is overflow\n");
                return;
          }
          queue->tail=(queue->tail+1)%maxsize;//最开始tail等于0,所以第一圈是
             //从que[1]开始插入数据的.所以第一圈que[0]是乱码
          queue->que[queue->tail]=x;
    }
    int outqueue(QUEUE* queue)//列表删除元素
    {
        if(queue->head==queue->tail)
           {
                printf("该队列为空\n");
                return;
           }
           queue->head=(queue->head+1)%maxsize;
    }
    void main()
    {
        QUEUE queue;
        queue =initialize(queue);//若子函数是指针类型,则为initialize(&queue),传地址
        show(&queue);
        inqueue(&queue,32);
        inqueue(&queue,42);
        inqueue(&queue,52);
        inqueue(&queue,62);
        inqueue(&queue,92);
        inqueue(&queue,82);
       // inqueue(&queue,72);
        show(&queue);
        outqueue(&queue);
        show(&queue);
    }

        这次代码的可读性好多了,中间碰到很多问题,都写在注释里了,学会了用typeof定义结构体。

  • 相关阅读:
    数据库常用面试题
    Base64、Md5、Des加密
    C#反射类型的使用
    C# 反射工厂模式的实现
    生成验证码的例子
    轻松实现页面提交时,显示“提交中..” (转)
    编写高性能 Web 应用程序的 10 个技巧 (转)
    由Duwamish学习web.config的配置(转)
    .Net配置文件常用配置说明 (转)
    用asp.net还原与恢复sqlserver数据库(转)
  • 原文地址:https://www.cnblogs.com/sunmarvell/p/6064386.html
Copyright © 2011-2022 走看看