zoukankan      html  css  js  c++  java
  • 队列里面的二级指针

      今天班上一起聚餐,曹老师请客,大家都很嗨,一帮大佬爷们,一起学习一起吃饭睡觉。还记的曹老师前几天和我讲的:我的任务就是一次又一次的打倒你们,然后又把你们扶起来(我。。。)。

      今天第一阶段的学习正式结束,据说是最辛苦的一个月,然后幸福都是他们的。我还有很长的路要走,还有不少的知识盲点,以后的学习任务依然很艰巨只要每天都过得充实每天都有所收获,再辛苦都是值得的,只有方向是对的,我从来都不会怜惜我的努力。

      不多说了,教室里只有我一个人了,(矫情给谁看,,,)

      队列其实就是受限制的线性表,一般主要用的是链式队列,顺序队列由于要担心长度问题,所以比较少用。本以为可以在链表的基础上学的挺轻松,结果在出队列的时候老师要求我用二级指针返回一个指针,以前用的都是指针函数,问了不少人,都没有得到答案,曹老师也是守口如瓶。。。

      想了好久依然毫无头绪,看了两部电影后,一次调试一次成功哈哈,不过已经十二点了,他们还在调程序,晚归的程序猿,一下是具体代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>

    typedef struct node
    {
    int data;
    struct node* next;
    }node_t;

    typedef struct linkqueue
    {
    node_t *front, *rear;
    int length;
    }lqueue_t;

    /*************************************************************************************/
    int init_que(lqueue_t *lque)
    {
    lque->front = NULL;
    lque->rear = NULL;
    lque->length = 0;
    return 0;
    }

    int in_lque(lqueue_t *lque, node_t * pin)
    {

    if(lque->front == NULL)
    {
    lque->front = pin;
    lque->rear = pin;
    lque->length++;

    }
    else
    {
    lque->rear->next = pin;
    lque->rear = pin;
    lque->length++;

    }
    }

    /*需要返回一个指针,而指针做形参时,操作的是指针里面的内容,所以
    需要一个类型里面存放的是指针,这时候就用到了二级指针,对二级指针
    的内容操作其实就是对里面的指针操作,可以实现回传指针给主函数。
    在子函数里面的操作,只要把(*p)看成是一个指针类型操作即可

    */
    int out_lque(lqueue_t *lque, node_t ** pout)
    {
    if(lque->front == NULL)
    {
    return -1;
    }
    else
    {
    (*pout) = lque->front;
    lque->front = lque->front->next;

    (*pout)->next = NULL;

    lque->length--;
    printf("we%d ",(*pout)->data);
    printf("hello%d ",(*pout)->data);
    }
    return 0;
    }
    /*使用指针函数返回指针,一般比较常用,不容易出错*/
    /*
    node_t * out_lque(lqueue_t *lque)
    {node_t * pout;
    if(lque->front == NULL)
    {
    return -1;
    }
    else
    {
    pout = lque->front;
    lque->front = lque->front->next;

    pout->next = NULL;

    lque->length--;
    printf("we%d ",pout->data);
    printf("hello%d ",pout->data);
    }
    return pout;
    }
    */
    int create_que(lqueue_t *lque)
    {
    int num;

    node_t *lq = (node_t*)malloc(sizeof(node_t));
    //memset(lq , 0, sizeof(node_t));
    lq ->next = NULL;

    printf("input the number :");
    scanf("%d",&num);
    lq->data = num;

    while(num != 0)
    {
    in_lque(lque, lq);
    lq = (node_t*)malloc(sizeof(node_t));
    //memset(lq, 0, sizeof(node_t));
    lq->data = num;
    lq->next = NULL;

    printf("input the number :");
    scanf("%d",&num);


    }
    printf("lenth = %d ",lque->length);
    }

    int main(int argc, char* argv[])
    {
    printf("are you ok ");
    int num;
    int i;
    node_t *pout = NULL;
    //pout = (node_t*)malloc(sizeof(node_t));
    //memset(pout , 0, sizeof(node_t));
    //pout ->next = NULL;

    lqueue_t que;
    init_que(&que);

    create_que(&que);
    printf("creat ok ");
    //pout = out_lque(&que);
    out_lque(que, &pout);

    printf("zhee%d ",pout->data);
    }

      程序比较简单,只要联系链表的操作就不难懂,关键是二级指针这个知识点 的掌握。

  • 相关阅读:
    USACO 5.4.2 tour
    USACO 4.4.2 milk6
    USACO 6.1.2 rectbarn
    USACO 4.1.4 cryptcow
    VC++学习笔记之ActiveX
    VC++学习笔记之MFC应用程序创建/执行顺序和MFC运行机制
    FusionCharts Free(一)使用方法和应用实例(asp.net)
    FusionCharts Free(二)使用方法详细解析
    VC++学习笔记之MFC消息映射机制
    MFC基本知识沉淀
  • 原文地址:https://www.cnblogs.com/ygy1784717631/p/4750908.html
Copyright © 2011-2022 走看看