About cherry
Hello!My name is cherry blowing and you can also call me cherry.XD
喜欢二次元文化,阅番无数,热衷于剪辑自己喜欢的动漫的视频
游戏:Apex/Osu!/Cs2…….
喜欢数学以及计算机知识,热爱学习自己感兴趣的事物。


加载过慢请开启缓存 浏览器默认开启
Hello!My name is cherry blowing and you can also call me cherry.XD
喜欢二次元文化,阅番无数,热衷于剪辑自己喜欢的动漫的视频
游戏:Apex/Osu!/Cs2…….
喜欢数学以及计算机知识,热爱学习自己感兴趣的事物。


二叉树的前序、中序、后序、层次、线索、遍历
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct BiNode{
char data;
struct BiNodelchild,rchild;
int ltag,rtag;
}BINODE,BiTree;
BINODEpre=NULL;
//创建二叉树
void CreateBiTree(BiTree t)
{
char ch;
ch=getchar();
if(ch==’#’) t=NULL;
else
{
t=(BiTree)malloc(sizeof(BINODE));
(t)->data=ch;
(t)->ltag=(t)->rtag=0;
CreateBiTree(&(t)->lchild);
CreateBiTree(&(t)->rchild);
}
}
//先序遍历
void Pre(BiTree T)
{
if(T)
{
printf(“%c”,T->data);
Pre(T->lchild);
Pre(T->rchild);
}
}
//中序遍历
void Mid(BiTree T)
{
if(T)
{
printf(“%c”,T->data);
Mid(T->lchild);
Mid(T->rchild);
}
}
//后序遍历
void Back(BiTree T)
{
if(T)
{
printf(“%c”,T->data);
Back(T->lchild);
Back(T->rchild);
}
}
void level(BiTree T)
{
//用队列
BiTree queue[1000],b;
int beg=0,end=0;
if(T)
{
queue[end++]=T;
while(beg!=end)
{
b=queue[beg++];
printf(“%c”,b->data);
if(b->lchild!=NULL) queue[end++]=b->lchild;
if(b->rchild!=NULL) queue[end++]=b->rchild;
}
}
}
//线索遍历:
//1.以结点p为根的中序线索化
void MidThread(BiTree p)
{
if(p)
{
MidThread(p->lchild);
if(!p->lchild)
{
p->lchild=pre;
p->ltag=1;
}
if(!pre->rchild)
{
pre->rchild=p;
pre->rtag=1;
}
pre=p;
MidThread(p->rchild);
}
}
//将整个二叉树中序线索化
BINIDECreateMidThread(BiTree T)
{
BINODEhead;
head=(BINODE)malloc(szieof(BINODE));
head->rtag=1; //后继
head->rchild=head; //右孩子指向自己
head->ltag=0; //有左孩子
head->lchild=T; //头节点左孩子指向树根
pre=head;
MidThread(t);
pre->rtag=1;
pre->rchild=head;
head->rchild=pre;
return head;
}
//计算二叉树深度
int Depth(BiTree T)
{
if(T==NULL) return 0;
int m,n;
m=Depth(T->lchild);
n=Depth(T->rchild);
if(m>n) return m+1;
else return n+1;
}
int main()
{
BiTree T=NULL;
return 0;
}
| 符号 | 含义 |
|---|---|
| $0 | 表示整行文本 |
| $n | 表示文本行中的第n个数据字段 |
| ; | 分割多条命令 |
| FNR | 当前文件当前记录数 |
| NR | 所有文件目前已经处理的输入记录数 |
| 数组 | 其中一种使用方式:用字典的key值来索引,key必须唯一 |
| next | 跳过剩下的模式和表达式,直接处理下一个命令行 |
正则
| 正则 | awk正则 |
|---|---|
| ^ 表示以…开头的行 | 某一列的开头 $3~/^oldboy/ |
| $ 表示以…开头的列 | 某一列的结尾 $4~/liaodao$/ |
| ^$ 表示空行 | 某一列是空的 |
| 通配符 | 含义 | 实例 |
|---|---|---|
| * | 匹配0或多个字符 | a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab |
| ? | 匹配任意一个字符 | a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b |
| [list] | 匹配list中的任意单一字符 | a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb |
| [!list]或将’!’改成’^’ | 匹配 除list 中的任意单一字符 | a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b |
| [c1-c2] | 匹配c1-c2中的任意单一字符 | a[0-9]b 0与9之间有且只有一个字符,如a0b,a1b。 |
| [!c1-c2] | 匹配不在c1-c2的任意字符 | a[!0-9]b 如acb adb |
| 字符 | 含义 |
|---|---|
| ^ | 以什么开头 |
| $ | 以什么结尾 |
| ^$ | 表示空行 |
| . | 任意单个字符 比如a.b ,即a和b直接有任意一个字符 |
| [] | 字符范围,如[a-z] |
| \ | 转义字符,恢复字符原来的含义^ |
| * | 前面的字符出现0次或多次,比如a*,可以匹配到123a,123aa,123aaa等字符 |
| .* | 任意字符出现了任意次 |
| [c1-c2] | 匹配c1-c2中的任意单一字符 |
| + | 匹配前一个字符1次或多次(注意与*区分开) |
| [:/]+ | 匹配括号内的字符”:”或者”/“ 1次或多次 |
| ? | 匹配前1个字符0次或1次 |
| | | 或 |
| () \n | 1个整体 abc123 —–> (abc) (123) —-> \2\1 ( \2表示引用第二个小括号的内容,\1表示引用第一个小括号的内容) |
| a{n,m} | a这个字符最少出现n次,最多出现m次 |
| a{n,} | a这个字符最少出现n次,最多不限 |
| a{,m} | a这个字符最少出现0次,最多出现m次 |
如何表示0到9数字?
1 | [0-9] |
如何表示英文字母?
1 | [a-zA-Z] |
如何表示“13”头的手机号码?
1 | 13[0-9]{9} |
如何表示电子邮箱地址?
1 | [a-zA-Z0-9._]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,3} |
5.假设我们要搜索美国的社会安全号,格式是999-99-9999,对应的正则表达式
1 | [0-9]{3}\-[0-9]{2}\-[0-9]{4} |
如果要查找一个文件中“a.txt”的所有邮箱
1 | grep -oE '[a-zA-Z0-9._]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,3}' a.txt |