#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct GLNode       //定义存储中缀表达式的结点类型
{char name[100];char prof[100];int type;struct{struct GLNode *hp,*tp;} ptr;   /*hp指向同级的下一结点,tp指向下级的首结点*/
} GList;
GList *GListCreate()   //建立广义表
{GList *head,*p,*q,*s,*r;   //简要介绍:head指向头结点;p指向导师结点;q指向研究生结点;r指向本科生节点; s指向新建立的节点int i,j,b;char str[100];b=1;head=p=q=r=s=NULL;while(b){printf("请输入人员信息");scanf("%s",str);s =(GList *)malloc(sizeof(GList));if(!s) printf("申请空间失败!");for(j=0,i=0; str[i] != '-'; j++,i++)      //将字符串中的学生信息转化成学生结点s->name[j] = str[i];s->name[j] = '\0';i=i+1;for(j=0; str[i] != '-'; j++,i++)s->prof[j] = str[i];s->prof[j] = '\0';i=i+1;s->type = str[i] - 48;s->ptr.hp=NULL;s->ptr.tp=NULL;switch(s->type){case 0:if(head)p->ptr.hp=s;   // 非首结点elsehead=s;     // 首结点的处理p=s;r=q=s;            // a在此等于m,主要是处理本科生直属于导师的情况break;case 1:if(p->ptr.tp)q->ptr.hp=s;  //非首结点的处理elseq->ptr.tp=s;  // 首结点的处理q=s;r=s;break;case 2:if(q->ptr.tp)r->ptr.hp=s;  //非首结点的处理elser->ptr.tp=s;  //首结点的处理r=s;break;default:printf("结点有误");break;}printf("输入1:继续添加;输入0:录入结束");scanf("%d",&b);}return head;
}
void Inquire(GList *head)                      //查询信息
{char n[100];GList *p,*q,*r;int result;result=0;p = head;printf("\n请输入所查询人员的姓名:\n");scanf("%s",n);while(p != NULL&&result==0){q = p->ptr.tp;if(!strcmp(p->name,n)){printf("\n查询结果:姓名:%s 职称:%s 类型:导师\n",p->name,p->prof);result=1;}else{if(q->type == 2)        // 该导师带本科生
            {r = q;while(r!= NULL){if(!strcmp(r->name,n)){printf("\n查询结果:姓名:%s 班级:%s 类型:本科生\n",r->name,r->prof);printf("所属导师:姓名:%s 职称:%s\n",p->name,p->prof);result=1;}r=r->ptr.hp;}}else{while(q!= NULL){r = q->ptr.tp;if(!strcmp(q->name,n)){printf("\n查询结果:姓名:%s 班级:%s 类型:研究生\n",q->name,q->prof);printf("所属导师:姓名:%s 职称:%s\n",p->name,p->prof);result=1;}while(r!= NULL){if(!strcmp(r->name,n)){printf("\n查询结果:姓名:%s 班级:%s 类型:本科生\n",r->name,r->prof);printf("所属导师:姓名:%s 职称:%s\n",p->name,p->prof);printf("所属导师生:姓名:%s 班级:%s\n",q->name,q->prof);result=1;}r=r->ptr.hp;}q = q->ptr.hp;}}p=p->ptr.hp;}}if(!result) printf("查无此人!\n");printf("\n");
}
GList *StudentInsert(GList *head)                     //插入学生
{char student[100],teacher[100],graduate[100];GList *s,*p,*q,*r;int i,j;p = head;printf("请输入待插入学生信息,如:李刚-二班-1\n");scanf("%s",student);s =(GList *)malloc(sizeof(GList));if(!s) printf("申请空间失败!");for(j=0,i=0; student[i] != '-'; j++,i++)      //将字符串中的学生信息转化成学生结点s->name[j] = student[i];s->name[j] = '\0';i=i+1;for(j=0; student[i] != '-'; j++,i++)s->prof[j] = student[i];s->prof[j] = '\0';i=i+1;s->type = student[i] - 48;s->ptr.hp=NULL;s->ptr.tp=NULL;printf("请输入所属导师姓名:\n");scanf("%s",teacher);while(p&&strcmp(p->name,teacher))p = p->ptr.hp;if(!p)printf("此导师不存在,不能插入!\n");else{switch(s->type){case 1:if(!p->ptr.tp){p->ptr.tp=s;printf("插入成功!\n");}else{if(p->ptr.tp->type==2)printf("该导师只能带本科生,因此不能将研究生插入!\n");else{q=p->ptr.tp;while(q->ptr.hp)q=q->ptr.hp;q->ptr.hp=s;printf("插入成功!\n");}}break;case 2:if(!p->ptr.tp){p->ptr.tp=s;printf("插入成功!\n");}else{switch(p->ptr.tp->type){case 1:printf("请输入所属研究生姓名:\n");     //导师带研究生scanf("%s",graduate);q=p->ptr.tp;while(q&&strcmp(q->name,graduate))q=q->ptr.hp;if(!q)printf("该研究生不存在,不能插入!\n");else{if(!q->ptr.tp){q->ptr.tp=s;printf("插入成功!\n");}else{r=q->ptr.tp;while(r->ptr.hp)r=r->ptr.hp;r->ptr.hp=s;printf("插入成功!\n");}}break;case 2:if(!p->ptr.tp)         //导师带本科生
                    {p->ptr.tp=s;printf("插入成功!\n");}else{r=p->ptr.tp;while(r->ptr.hp)r=r->ptr.hp;r->ptr.hp=s;printf("插入成功!\n");}break;default:printf("结点有误");break;}}break;default:printf("结点有误");break;}}return head;
}
GList *StudentDelete(GList *head)          // 删除学生
{char student[100];GList *s,*p,*q,*r,*t;int i,j,result;result=0;p=q=r=head;printf("请输入待删除学生信息,如:李刚-二班-1\n");scanf("%s",student);s =(GList *)malloc(sizeof(GList));if(!s) printf("申请空间失败!");for(j=0,i=0; student[i] != '-'; j++,i++)      //将字符串中的学生信息转化成学生结点s->name[j] = student[i];s->name[j] = '\0';i=i+1;for(j=0; student[i] != '-'; j++,i++)     s->prof[j] = student[i];s->prof[j] = '\0';i=i+1;s->type = student[i] - 48;s->ptr.hp=NULL;s->ptr.tp=NULL;switch(s->type){case 1:do{if(p->ptr.tp->type==1){q=p->ptr.tp;t=p;while(q&&strcmp(q->name,s->name)){t=q;q=q->ptr.hp;}if(!strcmp(q->name,s->name)){if(q->ptr.tp){printf("此研究生下有本科生,请先将本科生移至别处,再删除此研究生");result=2;break;}else{result=1;if(t->type==0) t->ptr.tp=q->ptr.hp;else t->ptr.hp=q->ptr.hp;free(q);}}}p=p->ptr.hp;}while(p != NULL&&result==0);break;case 2:do{if(!p->ptr.tp){p=p->ptr.hp;continue;}else{switch(p->ptr.tp->type){case 1:q=p->ptr.tp;                //导师带研究生while(q&&!result){t=q;r=t->ptr.tp;while(r&&strcmp(r->name,s->name)){t=r;r=r->ptr.hp;}if(r){result=1;if(t->type==1) t->ptr.tp=r->ptr.hp;else t->ptr.hp=r->ptr.hp;free (r);}else q=q->ptr.hp;}break;case 2:r=p->ptr.tp;                       //导师带本科生t=p;while(!result&&r){while(r&&strcmp(r->name,s->name)){t=r;r=r->ptr.hp;}if(r){result=1;if(t->type==0) t->ptr.tp=r->ptr.hp;else t->ptr.hp=r->ptr.hp;free(r);}}break;default:break;}}p=p->ptr.hp;}while(p != NULL&&result==0);break;default:printf("结点有误");break;}if(result==0) printf("查无此人");return head;
}
void StudentCount(GList *head)//统计导师的研究生、本科生人数
{GList *p,*q,*r;int graduate=0,ungraduate=0;char teacher[100];printf("请输入老师姓名:\n");scanf("%s",teacher);p=head;while(p&&strcmp(p->name,teacher)){p=p->ptr.hp;}if(!p)     printf("查无此导师");else{if(p->ptr.tp){if(p->ptr.tp->type==1){q=p->ptr.tp;while(q){graduate++;r=q->ptr.tp;while(r){ungraduate++;r=r->ptr.hp;}q=q->ptr.hp;}}else{r=p->ptr.tp;while(r){ungraduate++;r=r->ptr.hp;}}}printf("该导师带的研究生数为%d",graduate);printf("该导师带的本科生数为%d",ungraduate);}
}
void GListPrint(GList *head)//输出广义表
{GList *p,*q,*r;p = head;while(p){printf("%s-%s-%d  ",p->name,p->prof,p->type);if(p->ptr.tp)                 //导师带学生
        {switch(p->ptr.tp->type){case 1:q=p->ptr.tp;                      //导师带研究生while(q){printf("%s-%s-%d  ",q->name,q->prof,q->type);if(q->ptr.tp)            //研究生带本科生
                    {r=q->ptr.tp;while(r){printf("%s-%s-%d  ",r->name,r->prof,r->type);r=r->ptr.hp;}}q=q->ptr.hp;}break;case 2:r=p->ptr.tp;             //导师直接带本科生while(r){printf("%s-%s-%d  ",r->name,r->prof,r->type);r=r->ptr.hp;}break;default:printf("结点有误");break;}}p=p->ptr.hp;printf("\n");}
}int main()
{int b;GList *Head;Head=NULL;printf("1.建立广义表\n");Head = GListCreate();do{printf("2.插入学生\n");printf("3.删除学生\n");printf("4.查询信息\n");printf("5.统计导师的研究生、本科生人数\n");printf("6.输出广义表\n");printf("0.退出\n");scanf("%d",&b);switch(b){case 2:Head = StudentInsert(Head);break;case 3:Head = StudentDelete(Head);break;case 4:Inquire(Head);break;case 5:StudentCount(Head);break;case 6:GListPrint(Head);break;case 0:break;default:printf("选择有误");break;}if(b==0) break;}while(1);return 0;
}

View Code

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
typedef struct GLNode
{string name;string prof;int type;struct{struct GLNode *hp,*tp; //hp指向下一节点,tp指向下一级的首节点
    } ptr;
} GList;GList *GListCreate(int typ)
{GList *head,*p,*q,*s,*r;int cho=1;head=p=q=r=s=NULL;while(cho){s =(GList *)malloc(sizeof(GList));if(!s)cout << "申请空间失败" << endl;s->type = typ;if(typ==0)cout << "请输入导师的姓名与职称" << endl;elsecout << "请输入学生的姓名及班级" << endl;string name,prof;cin >> name >> prof;s->name = name;s->prof = prof;s->ptr.hp=NULL;s->ptr.tp=NULL;if(head)p->ptr.hp=s;elsehead=s;p=s;r=q=s;cout << "1:继续添加" << endl;cout << "0:结束" << endl;cin >> cho;}return head;
}GList *StudentInsert(GList *head, int typ)
{GList *s,*p,*q,*r;p = head;s =(GList *)malloc(sizeof(GList));if(!s) printf("申请空间失败!");cout << "请输入学生的姓名及班级:" << endl;string name,prof;cin >> name >> prof;s->name = name;s->prof = prof;s->type = typ;s->ptr.hp=NULL;s->ptr.tp=NULL;cout << "请输入所属导师的姓名" << endl;string teacher,graduate;cin >> teacher;while(p&&p->name!=teacher)p = p->ptr.hp;if(!p)printf("此导师不存在,不能插入!\n");else{switch(s->type){case 1:if(!p->ptr.tp){p->ptr.tp=s;cout << "插入成功" << endl;}else{if(p->ptr.tp->type==2)cout << "该导师只能带本科生,插入失败" << endl;else{q=p->ptr.tp;while(q->ptr.hp)q=q->ptr.hp;q->ptr.hp=s;cout << "插入成功" << endl;}}break;case 2:if(!p->ptr.tp){p->ptr.tp=s;cout << "插入成功" << endl;}else{switch(p->ptr.tp->type){case 1:cout << "请输入该本科生所属研究生姓名" << endl;cin >> graduate;q=p->ptr.tp;while(q&&q->name!=graduate)q=q->ptr.hp;if(!q)cout << "该研究生不存在,插入失败" << endl;else{if(!q->ptr.tp){q->ptr.tp=s;cout << "插入成功" << endl;}else{r=q->ptr.tp;while(r->ptr.hp)r=r->ptr.hp;r->ptr.hp=s;cout << "插入成功" << endl;}}break;case 2:if(!p->ptr.tp)         //导师带本科生
                    {p->ptr.tp=s;cout << "插入成功" << endl;}else{r=p->ptr.tp;while(r->ptr.hp)r=r->ptr.hp;r->ptr.hp=s;cout << "插入成功" << endl;}break;default:cout << "插入失败" << endl;break;}}break;default:break;}}return head;
}GList *StudentDelete(GList *head,int type)
{GList *p,*q,*r,*t;int result;result=0;p=q=r=head;cout << "请输入需删除学生的姓名" << endl;string name;cin >> name;switch(type){case 1:do{if(p->ptr.tp->type==1){q=p->ptr.tp;t=p;while(q&&q->name!=name){t=q;q=q->ptr.hp;}if(q->name==name){if(q->ptr.tp){cout << "次研究生带有本科生,不可删除" <<endl;result=2;break;}else{result=1;if(t->type==0) t->ptr.tp=q->ptr.hp;else t->ptr.hp=q->ptr.hp;free(q);cout << "删除成功" << endl;}}}p=p->ptr.hp;}while(p != NULL&&result==0);break;case 2:do{if(!p->ptr.tp){p=p->ptr.hp;continue;}else{switch(p->ptr.tp->type){case 1:q=p->ptr.tp;                //导师带研究生while(q&&!result){t=q;r=t->ptr.tp;while(r&&r->name!=name){t=r;r=r->ptr.hp;}if(r){result=1;if(t->type==1) t->ptr.tp=r->ptr.hp;else t->ptr.hp=r->ptr.hp;free (r);cout << "删除成功" << endl;}else q=q->ptr.hp;}break;case 2:r=p->ptr.tp;                       //导师带本科生t=p;while(!result&&r){while(r&&r->name!=name){t=r;r=r->ptr.hp;}if(r){result=1;if(t->type==0) t->ptr.tp=r->ptr.hp;else t->ptr.hp=r->ptr.hp;free(r);cout << "删除成功" << endl;}}break;default:break;}}p=p->ptr.hp;}while(p != NULL&&result==0);break;default:break;}if(result==0)cout << "输入错误" << endl;return head;
}void Inquire(GList *head)
{string name;GList *p,*q,*r;int result;result=0;p = head;cout << "请输入需查询的姓名" << endl;cin >> name;while(p != NULL&&result==0){q = p->ptr.tp;if(p->name==name){cout << "导师姓名,职称: ";cout << p->name << " " << p->prof << endl;result=1;}else{if(q->type == 2)        // 该导师带本科生
            {r = q;while(r!= NULL){if(r->name==name){cout << "该本科生姓名,班级: ";cout << r->name << " " << r->prof << endl;cout << "所属导师:姓名: 职称: ";cout << p->name << " " << p->prof << endl;result=1;}r=r->ptr.hp;}}else{while(q!= NULL){r = q->ptr.tp;if(q->name==name){cout << "该研究生姓名,班级: ";cout << r->name << " " << r->prof << endl;cout << "所属导师:姓名: 职称: ";cout << p->name << " " << p->prof << endl;result=1;}while(r!= NULL){if(r->name==name){cout << "该本科生姓名,班级: ";cout << r->name << " " << r->prof << endl;cout << "所属导师:姓名: 职称: ";cout << p->name << " " << p->prof << endl;cout << "所属研究生:姓名: 职称: ";cout << q->name << " " << q->prof << endl;result=1;}r=r->ptr.hp;}q = q->ptr.hp;}}p=p->ptr.hp;}}if(!result) printf("查无此人!\n");printf("\n");
}void StudentCount(GList *head)
{GList *p,*q,*r;int graNum=0,ungraNum=0;string teacher;cout << "请输入导师姓名" << endl;cin >> teacher;p=head;while(p&&p->name!=teacher){p=p->ptr.hp;}if(!p)cout << "导师姓名输入错误" << endl;else{if(p->ptr.tp){if(p->ptr.tp->type==1){q=p->ptr.tp;while(q){graNum++;r=q->ptr.tp;while(r){ungraNum++;r=r->ptr.hp;}q=q->ptr.hp;}}else{r=p->ptr.tp;while(r){ungraNum++;r=r->ptr.hp;}}}cout <<"导师" << teacher<< "带研究生数量:" << graNum << "   本科生" << ungraNum << endl;}
}void GListPrint(GList *head)
{GList *p,*q,*r;p = head;while(p){cout << "导师:  ";cout << p->name << "," << p->type <<endl;if(p->ptr.tp){switch(p->ptr.tp->type){case 1:q=p->ptr.tp;while(q){cout << "研究生:  ";cout << q->name << "," << q->type <<endl;if(q->ptr.tp){r=q->ptr.tp;while(r){cout << "本科生:  ";cout << r->name << "," << r->type <<endl;r=r->ptr.hp;}}q=q->ptr.hp;}break;case 2:r=p->ptr.tp;while(r){cout << "本科生:  ";cout << r->name << "," << r->type <<endl;r=r->ptr.hp;}break;default:break;}}p=p->ptr.hp;cout << endl;cout << endl;}
}
int main()
{do{cout << "-----------------------------------------" << endl;cout << "|***************************************|" << endl;cout << "|*1建立:建立导师广义表                *|" << endl;cout << "|*2插入:插入某位本科生或研究生        *|" << endl;cout << "|*3删除:删除某本科生或研究生          *|" << endl;cout << "|*4查询:查询导师、本科生或研究生      *|" << endl;cout << "|*5统计:某导师带了多少个研究生和本科生*|" << endl;cout << "|*6输出:输出全部信息                  *|" << endl;cout << "|*0退出:程序结束                      *|" << endl;cout << "|***************************************|" << endl;cout << "-----------------------------------------" << endl;int cho;cin >> cho;switch(cho){case 1:GList *Head;Head=NULL;Head = GListCreate(0);break;case 2:cout << "1.插入研究生" << endl;cout << "2.插入本科生" << endl;cin >> cho;Head = StudentInsert(Head,cho);break;case 3:cout << "1.删除研究生" << endl;cout << "2.删除本科生" << endl;cin >> cho;Head = StudentDelete(Head,cho);break;case 4:Inquire(Head);break;case 5:StudentCount(Head);break;case 6:GListPrint(Head);break;case 0:break;default:printf("选择有误");break;}if(cho==0) break;getchar();}while(1);return 0;
}

View Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
using namespace std;
int num;
int magicsqr[100][100];
void Input();
void Create();
void Output();
int main()
{do{cout << "-----------------------------------------" << endl;cout << "|***************************************|" << endl;cout << "|*                                     *|" << endl;cout << "|*      1.生成魔方阵                   *|" << endl;cout << "|*                                     *|" << endl;cout << "|*      0.退出                         *|" << endl;cout << "|*                                     *|" << endl;cout << "|***************************************|" << endl;cout << "-----------------------------------------" << endl;int cho;cin >> cho;switch(cho){case 1:Input();Create();Output();break;case 2:continue;break;}}while(1);return 0;
}
void Input()
{cout << "请输入魔方阵的阶数: " << endl;cin >> num;if(num>100){cout << "输入数据过大,请重新输入" << endl;Input();}if(num<1){cout << "输入数据错误,请重新输入" << endl;Input();}if(num%2==0){cout << "请输入奇数" << endl;Input();}
}
void Create()
{memset(magicsqr, 0, sizeof(magicsqr));int row=0;int col=num/2;magicsqr[row][col] = 1;for(int i=2;i<=num*num;i++){int m = row;int n = col;row--;col++;if(row<0)row=num-1;if(col>num-1)col=0;if(magicsqr[row][col]!=0){row=m+1;col=n;magicsqr[row][col]=i;continue;}magicsqr[row][col]=i;}
}
void Output()
{cout << "生成的魔方阵为:" << endl;for(int i=0;i<num;i++){cout<<setfill(' ');for(int j=0;j<num;j++)cout << setw(4) << magicsqr[i][j];cout << endl;}
}

View Code

转载于:https://www.cnblogs.com/vactor/p/4545407.html

导师-学生问题_广义表相关推荐

  1. 基于广义表的导师分配系统

    一.小学期要求 1.1 问题描述 在高校的教学改革中,有很多学校实行了本科生导师制.一个班级的学生被分给几个老师,每个老师带领n个学生,如果老师还带研究生,那么研究生也可直接负责本科生. 本科生导师制 ...

  2. java 广义表_数据结构:广义表的实现(Java)

    Java实现广义表: package 广义表; import java.util.Stack; public class Test { public final int TAG_TABLE = 1; ...

  3. 二维数组m的元素是4个字符组成的串_串、数组和广义表

    1. 串 1.1 串的定义 ADT String{ 数据对象:D={ai|ai∈CharacterSet, i=1, 2, -, n, n≧0} 数据关系:R1={|ai-1, ai∈D, i=2, ...

  4. 广义表取表头表尾_数据结构广义表的递归算法

    Hello同学们,又到了美妙的星期三,很开心又和大家见面了.这次我们要来讲一讲关于广义表的那些事儿! 俗语说:"与其临渊羡鱼,不如退而结网." 希望通过今天的学习大家可以有所收获. ...

  5. java 广义表_数组和广义表

    数组和广义表 一.数组 1.定义 数组是数据结构的基本结构形式,它是一种顺序式的结构. 数组是存储同一类型数据的数据结构,使用数组时需要定义数组的大小和存储数据的数据类型. 2.分类 数组分为一维数组 ...

  6. 数据结构之【数组和广义表】复习题

                          第 4  章  数组和广义表 一.选择题 1. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A666 ...

  7. 数组和广义表 - [数据结构]

    2005-09-07 数组和广义表 - [数据结构] 第五章 数组和广义表 --非线性数据结构 5.1 数组的定义和运算 ☆二维数组的逻辑结构形式定义为: 2_Array=( D, R ) 其中 D= ...

  8. 数据结构:串、数组和广义表

    串 线性结构:线性表.栈和队列.串与数组和广义表 串的逻辑结构和线性表极为相似,区别仅在于串的数据对象限定为字符集.在基本操作上,串和线性表有很大差别.线性表的基本操作主要以单个元素作为操作对象,如查 ...

  9. 数据结构与算法-Part6——数组与广义表

    目录 一丶数组 1:一维数组 2:二维数组 1)二维数组的概念 2)二维数组的顺序存储结构 3)二维数组的遍历 3:在C#中自定义矩阵类 二丶稀疏矩阵 1:稀疏矩阵的三元组 2:稀疏矩阵三元组集合的顺 ...

最新文章

  1. IOS的钥匙串,确保本地隐私数据的安全
  2. 谷歌生物医学专用翻译_文献翻译|知云翻译,写论文必备~
  3. 磁盘位置_CPT201-磁盘
  4. 颠覆:链表在删除和插入的效率一定优于数组吗?
  5. P2494 [SDOI2011]保密(网络流/最小割/01分数规划)
  6. 动态调整canvas时的问题
  7. Android仿探探卡片拖拽,Vue 仿探探拖拽卡片的效果
  8. 你愿意隐姓埋名一辈子吗?
  9. sql server的搜索_在SQL Server中进行全文本搜索
  10. python基础知识——文件
  11. 计算机网络技术毕业生实习报告_计算机网络专业毕业实习报告
  12. Pair project(刘昊岩11061156 黄明源11061186)
  13. html5禁止显示相册,手机相册图片莫名被屏蔽,显示“涉嫌违规,系统审查中”半年了...
  14. MySQL语法笔记(自用)
  15. Opencv C++图像处理(全)
  16. 统治地球的冯·诺依曼
  17. 马斯克,神!仅花11天强吞推特,全新商业帝国拼图完成
  18. violate关键字的用法
  19. Err: HLS C Simulation Run 按钮变为灰色
  20. UOS20 终端误删除之后的处理

热门文章

  1. Axure8原型设计实战案例:如何实现登录功能和用户管理?8年专业产品经理设计分享
  2. 金 融 量 化 分 析 • JoinQuant • 第 六 篇
  3. 远程答题的稳定与速度
  4. 【免费分享】[艾略特波浪理论-20周年纪念版]
  5. 7和7的倍数游戏答案_【20190806维游戏——数字游戏篇】奥数天天练(1—6年级)...
  6. 什么是程序设计?《禅与计算机程序设计艺术》 / 陈光剑
  7. 2022我的校招求职历程
  8. linux 误删grub引导文件,如何恢复
  9. 一直想学的Synchronized,原来是这样的底层原理
  10. phpunit 学习