zoukankan      html  css  js  c++  java
  • 2021-2022-1 20191315《信息安全系统设计与实现(上)》-Linux C语言编程基础

    Linux C语言编程基础

    要求

    1. 选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2.13,2.14任选一个)
    2. 建立自己的项目目录,包含自己学号信息(如20190100linkedlist),构建项目结构(src, include,bin, lib, docs, test...),然后把相应代码和文档放置到正确位置,用tree命令查看项目结构,提交截图(5分)
    3. 进行gcc相关练习(ESc, iso, -I等)提交相关截图(5分)
    4. 进行静态库,动态库制作和调用练习,提交相关截图(5分)
    5. 进行gdb相关练习,至少包含四种断点的设置,提交相关截图(10分)
    6. 编写makefile(5分)

    选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2.13,2.14任选一个)

    编写的程序为二叉树的层序遍历

    • 数据结构定义
    struct tree {//二叉树链式存储结构
        int data;
        struct tree* left;//指向左孩子
        struct tree* right;//指向右孩子
    }; 
    typedef struct queue{//队列的顺序存储结构
        struct tree* numQ[MaxSize];//申请的最大空间
        int front;//前驱
        int rear;//后继
    }Queue;
    
    • 本程序中定义了六个函数
    void initilize()  //初始化队列
    void Push(struct tree* root) //入队
    struct tree* Pop()  //出队
    int empty()   //判断队列是否为空
    struct tree* creatTree (struct tree* root) //建立二叉树
    void LevelOrderTraversal (struct tree* root) //二叉树的层序遍历
    
    • 主函数流程

    • 主要算法设计
      层序遍历过程就是从根开始,依次向下,对于每一层从左向右遍历。其实就是从上到下,从左到右依次将每个数放入到队列中,然后按顺序依次打印就是想要的结果。
      实现过程:首先将二叉树的根节点进入到队列中。判断节点如果有孩子,就将孩子进入到队列中,然后遍历过的节点出队列,循环以上操作,直到遍历完。

    • 代码
      test.h

    #ifndef _test_h_
    #define _test_h_
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MaxSize 100
     
    struct tree {
        int data;
        struct tree* left;
        struct tree* right;
    };
     
    typedef struct queue{
        struct tree* numQ[MaxSize];
        int front;
        int rear;
    }Queue;
     
    Queue Q;
    
    void initilize();
    void Push(struct tree* root);
    struct tree* Pop();
    int empty() ;
    struct tree* creatTree (struct tree* root);
    void LevelOrderTraversal (struct tree* root);
    
    #endif // _test_h_
    

    test.c

    #include "test.h"
    void initilize() { //初始化队列
        Q.front = 0;
        Q.rear = 0;
    }
     
    void Push(struct tree* root) { //入队
        Q.numQ[++Q.rear] = root;
    }
     
    struct tree* Pop() { //出队
        return Q.numQ[++Q.front];
    }
     
    int empty() { //判断队列是否为空
        return Q.rear == Q.front;
    }
     
    struct tree* creatTree (struct tree* root) {
        int value;
        scanf("%d", &value);//结点
        if (value == -1)//无孩子结点输入-1
            return NULL;
        root = (struct tree*)malloc(sizeof(struct tree));
        root->data = value;
        printf("please input %d left child:", root->data);
        root->left = creatTree(root->left);//左子树也是树,递归
        printf("please input %d right child:", root->data);
        root->right = creatTree(root->right);//递归
        return root;
    }
     
    void LevelOrderTraversal (struct tree* root) { //二叉树的层次遍历
        struct tree* temp;
        Push(root);
        while (!empty()) {//队列非空
            temp = Pop();
            printf("%d ", temp->data);  //访问取出队列结点
            if (temp->left)     //把Pop掉的结点的左孩子结点加入队列
                Push(temp->left);
            if (temp->right)    //把Pop掉的结点的右孩子结点加入队列
                Push(temp->right);
        }
    }
    

    main.c

    #include "test.h"
    int main() {
        printf("please input head node:");
        struct tree* root = creatTree(root);//建立二叉树
        initilize();  //初始化队列
        LevelOrderTraversal(root);//层序遍历
        
        return 0;
    }
    

    建立自己的项目目录

    进行gcc相关练习

    进行静态库,动态库制作和调用练习

    进行gdb相关练习

    编写makefile

  • 相关阅读:
    MySQL中interactive_timeout和wait_timeout的区别
    MySQL主从环境下存储过程,函数,触发器,事件的复制情况
    Hbase的伪分布式安装
    当master down掉后,pt-heartbeat不断重试会导致内存缓慢增长
    ERROR 1010 (HY000): Error dropping database (can't rmdir './test/', errno: 17)
    基于MySQL MEB的备份恢复
    pt-heartbeat
    B树和B+树的区别
    如何在Zabbix上安装MySQL监控插件PMP
    如何部署Zabbix服务端
  • 原文地址:https://www.cnblogs.com/harperhjl/p/15339704.html
Copyright © 2011-2022 走看看