该充电了哦!

常考代码

链表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
typedef struct LNode {
int data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;

void ListDelete(LinkList L, int i, int j) {
if (i <= 0 || i >= j || j > ListLength(L)) {
// 参数错误,退出函数
return;
}

// 找到第i个结点的前一个结点p和第j个结点的结点q
LinkList p = L;
for (int k = 1; k < i; k++) {
p = p->next;
}
LinkList q = p;
for (int k = i; k <= j; k++) {
q = q->next;
}

// 删除第i到第j个结点
LinkList temp;
while (p->next != q) {
temp = p->next;
p->next = temp->next;
free(temp);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//合并链表
typedef struct LNode {
int data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;

void Merge (LinkList &L)
{
p = L -> next;
while(p && p -> next)
{
q = p -> next;
p -> data = p -> data + q -> data;
p = q -> next;
free(q);
}
}

二叉树(重点)

1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct BiTNode { 
int data; // 结点数据
struct BiTNode *lchild, *rchild; // 左右孩子指针
}*BiTree;

int count=0;
void CountNode(BiTree T)
{
if(T == NULL) return;
if(T -> data > 20) count ++;
CountNode(T -> lchild);
CountNode(T -> rchild);
}

线性表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct {
int *elem; //存储空间基址
int length; //当前使用量
int listsize; //存储容量
}SqList;

bool SqListDelete (SqList &L, int i) // 删除第i个结点
{
if(i < 1 || i > L.length) return false;

p = &(l.elem[i-1]); //删除点的位置
q = L.elem + L.length - 1;
for(p ++; p <= q; p ++) *(p-1) = *(p);
L.length --;
return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*在i位置插入data*/

typedef struct {
int *elem; //存储空间基址
int CurNum; //当前使用量
int ListSize; //存储容量
}List;

bool ListInsert (List& L, int i,int data)
{
if(i < 1 || i > L.length + 1) return false;

if(l.CurNum >= L.ListSize)
{
newbase = (int*)realloc(L.elem, (L.ListSize + INCREASEMENT) * sizeof(int));
if(!newbsae) return false;
l.elem = newbase;
L.ListSize += INCREASEMENT;
}

idx = &(L.elem[i-1]);
q = L.elem + L.CurNum - 1;
for(p = idx; p <= q; p ++) *(p ++) = *(p);
*(idx) = data;
CurNum ++;
return true;
}

查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//二分查找
bool BinarySerach()
{
int l = 0, r = n;
while(l < r)
{
int mid = l + r >> 1;
if(check(mid)) l = mid + 1;
else r = mid;
}

if(succes(l)) return true;
else return false;
}