176 lines
2.9 KiB
Markdown
176 lines
2.9 KiB
Markdown
|
# 原创
|
|||
|
: 第一章 绪论
|
|||
|
|
|||
|
# 第一章 绪论
|
|||
|
|
|||
|
# 1.代码规范
|
|||
|
|
|||
|
```
|
|||
|
//功能函数实现
|
|||
|
void Reverse(int R[],int l,int r)
|
|||
|
{
|
|||
|
int i,j;
|
|||
|
int temp;
|
|||
|
for(i=l,j=r;i<j;++i,--j)
|
|||
|
{
|
|||
|
temp=R[i];
|
|||
|
R[i]=R[j];
|
|||
|
R[j]=R[i]
|
|||
|
}
|
|||
|
}
|
|||
|
//函数接口
|
|||
|
void RCR(int R[],int n,int p)
|
|||
|
{
|
|||
|
if(p<=0||p>=0)cout<<"ERROR"<<endl;
|
|||
|
else
|
|||
|
{
|
|||
|
Reverse(R,0,p-1);
|
|||
|
Reverse(R,p,n-1);
|
|||
|
Reverse(R,0,n-1);
|
|||
|
}
|
|||
|
}
|
|||
|
//其余的一些东西可以不用写
|
|||
|
```
|
|||
|
|
|||
|
# 2.C/C++基础
|
|||
|
|
|||
|
## 2.1 数据类型
|
|||
|
|
|||
|
```
|
|||
|
//结构型
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
int a;
|
|||
|
char b;
|
|||
|
float c;
|
|||
|
}TypeA;
|
|||
|
|
|||
|
//链表结点定义
|
|||
|
typedef struct Node
|
|||
|
{
|
|||
|
int date;
|
|||
|
struct Node *next;
|
|||
|
}Node;
|
|||
|
|
|||
|
//二叉树结点定义
|
|||
|
typedef struct BTNode
|
|||
|
{
|
|||
|
int date;
|
|||
|
struct BTNode *lchirld;
|
|||
|
struct BTNode *rchirld;
|
|||
|
}BTNode;
|
|||
|
|
|||
|
//制作结点
|
|||
|
//第一种严格要求自己不能用
|
|||
|
BTNode BT;
|
|||
|
//第二种经常用
|
|||
|
BTNode *BT;
|
|||
|
BT=(BTNode*)malloc(sizeof(BTNode));
|
|||
|
|
|||
|
//类似的申请动态数组空间
|
|||
|
//下面是申请数组元素为int型,长度为n
|
|||
|
int *p;
|
|||
|
p=(int *)malloc(n * sizeof(int));
|
|||
|
```
|
|||
|
|
|||
|
## 2.2 函数
|
|||
|
|
|||
|
```
|
|||
|
//被传入的函数的参数不会发生改变
|
|||
|
int a;
|
|||
|
void f(int x)
|
|||
|
{
|
|||
|
++x;
|
|||
|
}
|
|||
|
a = 0;
|
|||
|
f(a); //a=0
|
|||
|
|
|||
|
//被传入的参数发生改变,引用
|
|||
|
void f(int &x)
|
|||
|
{
|
|||
|
++x;
|
|||
|
}
|
|||
|
|
|||
|
//要求传入的指针发生改变
|
|||
|
void f(int *&x)
|
|||
|
{
|
|||
|
++x;
|
|||
|
}
|
|||
|
|
|||
|
//数组做参数用不用引用效果一样(只针对考研),数组元素改变
|
|||
|
//一维数组做参数
|
|||
|
void f(int x[],int n)
|
|||
|
{
|
|||
|
...;
|
|||
|
}
|
|||
|
|
|||
|
//二维数组做参数,maxSize是已经定义了的常数
|
|||
|
void f(int x[][maxSize],int n)
|
|||
|
{
|
|||
|
...;
|
|||
|
}
|
|||
|
|
|||
|
//结构体参数改变
|
|||
|
void insert(Sqlist &L,int x)
|
|||
|
{
|
|||
|
int p,i;
|
|||
|
p = LocateElem(L,x);
|
|||
|
for(i = L.length-1;i>=p;--i)
|
|||
|
L.date[i+1]=L.date[i];
|
|||
|
L.date[p] = x;
|
|||
|
++(L.length);
|
|||
|
}
|
|||
|
|
|||
|
//C是一个指向一个链表表头的指针,不代表整个链表
|
|||
|
//C不会变,但除C以外的所有结点都可能变化
|
|||
|
//下面是删除链表中第一个出现x的结点
|
|||
|
int SearchAndDelete(LNode *C,int x)
|
|||
|
{
|
|||
|
LNode *p,*q;
|
|||
|
p = C;
|
|||
|
whlie(p->next!=NULL)
|
|||
|
{
|
|||
|
if(p->next->date==x)break;
|
|||
|
p = p->date;
|
|||
|
}
|
|||
|
if(p->next==NULL)return 0;
|
|||
|
else
|
|||
|
{
|
|||
|
q = p->next;
|
|||
|
p->next=p->next->next;
|
|||
|
free(q);
|
|||
|
return 1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//C指针可能传进来的是空指针,需要它指向表头结点,故使用引用
|
|||
|
void merge(LNode *A,LNode *B,LNode *&C)
|
|||
|
{
|
|||
|
LNode *p=A->next;
|
|||
|
LNode *q=B->next;
|
|||
|
LNode *r;
|
|||
|
C = A;
|
|||
|
C->next = NULL;
|
|||
|
free(B);
|
|||
|
r = C;
|
|||
|
while(p!=NULL&&q!=NULL)
|
|||
|
{
|
|||
|
if(p->date<=q->date)
|
|||
|
{
|
|||
|
r->next=p;
|
|||
|
p=p->next;
|
|||
|
r=r->next;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
r->next=q;
|
|||
|
q=q->next;
|
|||
|
r=r->next;
|
|||
|
}
|
|||
|
}
|
|||
|
r = r->next;
|
|||
|
if(!p=NULL)r->next=p;
|
|||
|
if(!q=NULL)r->next=q;
|
|||
|
}
|
|||
|
```
|