1.链队
(1)link_queue.c
#include "link_queue.h"
//创建
Q_p creat_FR()
{
Q_p Q=(Q_p)malloc(sizeof(Q_t));
if(Q==NULL)
{
printf("空间申请失败\n");
return NULL;
}
Q->front=NULL;
Q->rear=NULL;
return Q;
}
//新结点
node_p creat_node(datatype data)
{
node_p new=(node_p)malloc(sizeof(node));
if(new==NULL)
{
printf("空间申请失败\n");
return NULL;
}
new->data=data;
return new;
}
//判空
int empty(Q_p Q)
{
if(Q==NULL)
{
printf("入参为空\n");
return -1;
}
return Q->front == NULL?1:0;
}
//入队
void push(Q_p Q,datatype data)
{
if(Q==NULL)
{
printf("入参为空\n");
return;
}
node_p new=creat_node(data);
if(empty(Q))
{
Q->front=new;
Q->rear=new;
return;
}
Q->rear->next=new;
Q->rear=new;
}
//出队
void pop(Q_p Q)
{
if(Q==NULL)
{
printf("入参为空\n");
return;
}
if(empty(Q))
{
printf("队列为空\n");
return;
}
node_p temp=Q->front;
printf("出队的值为:%d\n",Q->front->data);
Q->front=Q->front->next;
free(temp);
}
//打印
void show_node(Q_p Q)
{
if(Q==NULL)
{
printf("入参为空\n");
return;
}
if(empty(Q))
{
printf("队列为空\n");
return;
}
node_p temp=Q->front;
while(temp != NULL)
{
printf("%d->",temp->data);
temp=temp->next;
}
putchar(10);
}
//销毁
void free_node(Q_p *Q)
{
if(*Q==NULL||Q==NULL)
{
printf("入参为空\n");
return;
}
free(*Q);
*Q=NULL;
}
(2)link_queue.h
#ifndef __LINK_QUEUE_H__
#define __LINK_QUEUE_H__
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}node,*node_p;
typedef struct Q_t
{
node_p front;
node_p rear;
}Q_t,*Q_p;
//创建
Q_p creat_FR();
//新结点
node_p creat_node(datatype data);
//判空
int empty(Q_p Q);
//入队
void push(Q_p Q,datatype data);
//出队
void pop(Q_p Q);
//打印
void show_node(Q_p Q);
//销毁
void free_node(Q_p *Q);
#endif
(3)main.c
#include "link_queue.h"
int main()
{
Q_p Q=creat_FR();
push(Q,45);
push(Q,13);
push(Q,78);
show_node(Q);
printf("------------\n");
pop(Q);
show_node(Q);
printf("------------\n");
pop(Q);
show_node(Q);
printf("------------\n");
free_node(&Q);
show_node(Q);
return 0;
}
2.二叉树中序和后续遍历
(1)中序
//中序遍历
void mid(tree_p T)
{
if(T==NULL)
{
return;
}
mid(T->lchild);
printf("%c->",T->data);
mid(T->rchild);
}
(2)后续
//后序遍历
void hou(tree_p T)
{
if(T==NULL)
{
return;
}
hou(T->lchild);
hou(T->rchild);
printf("%c->",T->data);
}
3.先序:ABCDEFGH 中序:BDCEAFHG
4.中序:ABCDEFGHI 后序:ACEDBHIGF