链式队列的代码
创建
node_p create_que()
{
node_p H = (node_p)malloc(sizeof(node));//申请空间
if(H==NULL)//判定条件
{
printf("空间申请失败\n");
return NULL;
}
/给data数组和front,rear初始化
bzero (H->data,sizeof(H->data)); // 使用bzero 给数组空间清零
H->front = 3; //front和 rear不需要从0开始,但是队列为空时,front和rear要相等
H->raer = H->front;
return H;
}
判空
int empty_que(que_p H)
{
if(H==NULL)
{
printf("入参为空\n");
return -1;
}
return H->front==H->rear?1:0;
}
入队
void push_que(que_p H,datatype data)
{
if(H==NULL)
{
printf("入参为空\n");
return ;
}
if(full_que(H))
{
printf("队列已满\n");
return;
}
}
出队
oid pop_que(que_p H)
{
if(H==NULL)
{
printf("入参为空\n");
return ;
}
if(full_que(H))
{
printf("队列已满\n");
return;
}
}
输出队列
void show_que(que_p H)
{
if(H==NULL)
{
printf("入参为空\n");
return ;
}
if(empty_que(H))
{
printf("队列已满\n");
return;
}
}
释放队列
void free(que_p H)
{
if(H==NULL||*H==NULL)
{
printf("入参为空\n");
return ;
}
free(*H);
*H=NULL;
}
二叉树中序遍历+后续遍历的代码
中序遍历
void pri_inorder(node_p T)
{
if(T==NULL)
{
return;
}
pri_inorder(T->lchild);//先遍历左子树
printf("%d",T->data); //在访问根节点
pri_inorder(T->rchild); //最后遍历右子树
}
后续遍历
void pri_follow-up(node_p T)
{
if(T==NULL)
{
return;
}
pri_follow-up(T->lchild);//先遍历左子树
pri_follow-up(T->rchild); //再遍历右子树
printf("%d",T->data); //最后访问根节点
}
复习递归
递归:函数自身的调用,把大问题分解成多个独立的子问题进行解决的一种方式,本质是循环
直接递归: 一个函数的自身调用
死递归:类似于死循环
间接递归:多个函数之间的相互调用
画二叉树:先序遍历:FCADBEHGM
中序遍历:ACBDFHEMG