2/19作业

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

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值