• 队列


    //用数组结构实现队列
    # 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定义结构体。

  • 相关阅读:
    mysql第三天作业
    mysql第二天作业
    mysql第一天作业
    S5第一次月考
    网络编程(待补充)
    字符编码(待补充)
    继承和封装
    面向对象
    codeforces 394E Lightbulb for Minister 简单几何
    跟面试官讲Binder(零)
  • 原文地址:https://www.cnblogs.com/sunmarvell/p/6064386.html
Copyright © 2020-2023  润新知