队列里面的二级指针

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

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

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

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

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

#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);
}

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

原文地址:https://www.cnblogs.com/ygy1784717631/p/4750908.html