开始学习时间:13:30

学习计划:

1. 看数据结构专业课题

2. 政治一章内容

3. 操作系统专业课题

4. 政治一章内容

5. 数学卷子写完

6. 背英语作文

 

总结

完成的还是比较不错的,重点还是应该放在数学和专业课的复习上,政治和英语带着看就行了。

 

 

需要补习的知识点

* 堆排序

* 段页式之类的基础知识

* 银行家算法

* 信号量相关

 

数据结构专业课涉及知识点

* 广义表

* 最小生成树(prim算法和kruskal算法 + 两种图的存储结构(邻接矩阵+邻接表))

* 基数排序(桶排序)

* Dijkstra算法求最短路径(类似Prim算法)

* 平衡二叉树

    节点的平衡因子-1 0 1(该节点左子树和右子树的深度之差)

    旋转(一言难尽)

* 堆排序

 

 

试着写了一下代码题,就尼玛离谱,这tm在考场上真的能写出复杂的算法不用debug???


// 排序合并两个链表,A 有序, B无序
// 2022第四题 

#include <stdio.h>

typedef struct LinkNode{
    int num;
    struct LinkNode* next;
}LinkNode;

void print(LinkNode* A);

// 选择排序 
void SelectSort(LinkNode* A){
    LinkNode* i = A->next;
    LinkNode* j;
    
    int tmp;
    while (i != NULL){
        j = i->next;
        while(j != NULL){
            if (i->num > j->num){
                tmp = i->num;
                i->num = j->num;
                j->num = tmp;
            }
            j = j->next;
        }
        
        //print(A);
        i = i->next;
    }
    
    
}

void add_and_sort(LinkNode* A, LinkNode* B){
    LinkNode* before_i;   // 临时节点 保持在i前面一格 
    LinkNode* tmp;    // 临时节点 
    LinkNode* i, * j;
    i = A->next;
    j = B->next;
    before_i = A;
    while (i != NULL && j != NULL){
        if (i->num < j->num){
            before_i = before_i->next;
            i = i->next;
            continue;
        }
        // i > j
        // 插入
        tmp = j->next;
        before_i->next = j;
        before_i = j;
        j->next = i;
        
        j = tmp;
    }
    
    // 剩下的接队尾
    while( j != NULL ){
        before_i->next = j;
        j = j->next;
        before_i = before_i->next;
    } 
}


void print(LinkNode* A){
    LinkNode* p = A->next;
    while (p != NULL){
        printf("%d ", p->num);
        p = p->next;
    }
    printf("\n");
}

int main(){
    LinkNode* L = new LinkNode;  // 头结点
    LinkNode* tmp;
    tmp = new LinkNode;
    tmp->num = 5;
    tmp->next = NULL; // 结尾节点置空 
    L->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 41;
    tmp->next = L->next;
    L->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 12;
    tmp->next = L->next;
    L->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 15;
    tmp->next = L->next;
    L->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 61;
    tmp->next = L->next;
    L->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 9;
    tmp->next = L->next;
    L->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 16;
    tmp->next = L->next;
    L->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 19;
    tmp->next = L->next;
    L->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 21;
    tmp->next = L->next;
    L->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 62;
    tmp->next = L->next;
    L->next = tmp;
    
    print(L);
    
    
    LinkNode* B = new LinkNode;  // 头结点
    tmp = new LinkNode;
    tmp->num = 6;
    tmp->next = NULL; // 结尾节点置空 
    B->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 70;
    tmp->next = B->next;
    B->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 41;
    tmp->next = B->next;
    B->next = tmp;
    
    tmp = new LinkNode;
    tmp->num = 14;
    tmp->next = B->next;
    B->next = tmp;
    
    print(B);
    
    SelectSort(L);
    print(L);
    
    SelectSort(B);
    print(B);
    
    add_and_sort(L,B);
    print(L);
    
    return 0;


然后是2022第五题:

#include <stdio.h>

typedef struct BiTreeNode{
    int val;
    struct BiTreeNode* left;
    struct BiTreeNode* right;
}BiTreeNode, *BiTree;

// 递归遍历 
void InOrderTraverse(BiTree T){
    if(T){
        InOrderTraverse(T->left);
        printf("%d ", T->val);
        InOrderTraverse(T->right);
    }

// 非递归找度为2的节点
// 使用先序遍历 
int search_2_node(BiTree T){
    int _count = 0;
    BiTreeNode* a[1000] = {0};    //
    BiTreeNode* tmp = T;
    int p = -1;
    p ++;
    a[p] = T;
    
    
    while (p != -1){
        tmp = a[p];
        p --;
        printf("# %d ", tmp->val);
        // 查看度是否为2
        if (tmp->left != NULL && tmp->right!= NULL){
            _count += 1;
        } 
        // 将存在的子节点入栈
        if (tmp->right != NULL){
            p ++;
            a[p] = tmp->right;
        } 
        if (tmp->left != NULL){
            p ++;
            a[p] = tmp->left;
        } 
        
    }
    
    return _count;


int main(){
    BiTree tree = new BiTreeNode;
    tree->val = 1;
    tree->left = new BiTreeNode;
    tree->left->val = 2;
    tree->right = NULL;
    tree->left->left = new BiTreeNode;
    tree->left->left->val = 3;
    tree->left->left->left = NULL;
    tree->left->left->right = NULL;
    tree->left->right = new BiTreeNode;
    tree->left->right->val = 4;
    tree->left->right->left = new BiTreeNode;
    tree->left->right->left->val = 5;
    tree->left->right->right = new BiTreeNode;
    tree->left->right->right->val = 6;
    tree->left->right->right->left = NULL;
    tree->left->right->right->right = NULL;
    tree->left->right->left->left = NULL;
    tree->left->right->left->right = new BiTreeNode;
    tree->left->right->left->right->val = 7;
    tree->left->right->left->right->left = NULL;
    tree->left->right->left->right->right = NULL;
    
    InOrderTraverse(tree);
    
    printf("\n\n\n %d \n", search_2_node(tree));
    return 0;
}

 


 


0 Comments latest

No comments.