1.链队
//link_que.c
#include "link_que.h"
//创建链队
Q_p create_que()
{
Q_p q = (Q_p)malloc(sizeof(Q));
if(q==NULL)
{
printf("空间申请失败\n");
return NULL;
}
node_p L=(node_p)malloc(sizeof(node));
if(L==NULL)
{
printf("申请空间失败\n");
return NULL;
}
L->next=NULL;
q->front = L;
q->rear = L;
return q;
}
//创建结点
node_p create_node()
{
node_p new=(node_p)malloc(sizeof(node));
if(new==NULL)
{
printf("申请空间失败\n");
return NULL;
}
new->data=0;
new->next=NULL;
return new;
}
//判空
int empty_que(Q_p q)
{
if(q==NULL)
{
printf("入参为空\n");
return -1;
}
return q->front==NULL?1:0;
}
//入队
void push_que(Q_p q,datatype e)
{
if(q==NULL)
{
printf("入参为空\n");
return;
}
node_p s=create_node();
s->data=e;
q->rear->next=s;
q->rear=s;
}
//出队
void pop_que(Q_p q)
{
if(q==NULL)
{
printf("入参为空\n");
return;
}
if(empty_que(q))
{
printf("队为空\n");
return;
}
if(q->front->next==q->rear)
{
q->rear==q->front;
}
node_p p=q->front->next;
printf("出队元素为:%d\n",p->data);
q->front->next=p->next;
free(p);
p=NULL;
}
//打印
void show(Q_p q)
{
if(q==NULL)
{
printf("入参为空\n");
return;
}
if(empty_que(q))
{
printf("队为空\n");
return;
}
node_p p=q->front;
while(p->next!=NULL)
{
p=p->next;
printf("%d\n",p->data);
}
}
//销毁
void free_que(Q_p *q)
{
if(q==NULL||*q==NULL)
{
printf("入参为空\n");
return;
}
free(*q);
*q=NULL;
}
//link_que.h
#ifndef __LINK_QUE_H__
#define __LINK_QUE_H__
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}node,*node_p;
typedef struct Q
{
node_p front;
node_p rear;
}Q,*Q_p;
//创建链队
Q_p create_que();
//创建结点
node_p create_node();
//判空
int empty_que(Q_p q);
//入队push_que
void push_que(Q_p q,datatype e);
//出队pop_que
void pop_que(Q_p q);
//打印
void show(Q_p q);
//销毁
void free_que(Q_p *q);
#endif
//main.c
#include "link_que.h"
int main()
{
Q_p q = create_que();
push_que(q,90);
push_que(q,12);
push_que(q,6);
show(q);
putchar(10);
pop_que(q);
putchar(10);
show(q);
putchar(10);
push_que(q,1);
push_que(q,7);
push_que(q,5);
push_que(q,4);
push_que(q,3);
push_que(q,2);
show(q);
putchar(10);
free_que(&q);
show(q);
return 0;
}
2.二叉树的遍历
//tree.c
#include "tree.h"
//创建结点
tree_p create_node(char data)
{
tree_p new = (tree_p)malloc(sizeof(tree));
if(new==NULL)
{
printf("空间申请失败\n");
return NULL;
}
new->data=data;
return new;
}
//创建二叉树
tree_p create_tree()
{
char data = '\0';
scanf("%c",&data);
getchar();
if(data=='#')
return NULL;
tree_p T = create_node(data);
T->lch=create_tree();
T->rch=create_tree();
return T;
}
//先序遍历,根左右
void pri(tree_p T)
{
if(T==NULL)
return;
printf("%c->",T->data);
pri(T->lch);
pri(T->rch);
}
//中序遍历,左根右
void mid(tree_p T)
{
if(T==NULL)
return;
mid(T->lch);
printf("%c->",T->data);
mid(T->rch);
}
//后序遍历,左右根
void last(tree_p T)
{
if(T==NULL)
return;
last(T->lch);
last(T->rch);
printf("%c->",T->data);
}
//tree.h
#ifndef __TREE_H__
#define __TREE_H__
#include <stdio.h>
#include <stdlib.h>
typedef struct tree_node
{
char data;
struct tree_node *lch;
struct tree_node *rch;
}tree,*tree_p;
//创建结点
tree_p create_node(char data);
//创建二叉树
tree_p create_tree();
//先序遍历,根左右
void pri(tree_p T);
//中序遍历,左根右
void mid(tree_p T);
//后序遍历,左右根
void last(tree_p T);
#endif
//main.c
#include "tree.h"
int main()
{
tree_p T=create_tree();
printf("先序遍历\n");
pri(T);
putchar(10);
printf("中序遍历\n");
mid(T);
putchar(10);
printf("后序遍历\n");
last(T);
putchar(10);
return 0;
}
3.思维导图