天勤考研中数据结构的代码书写规范以及C与C++语言基础

考研综合应用题中算法设计部分的代码书写规范

头文件

  • 头文件部分如果题目没有特殊说明可以去掉。

常量

  • 如果题目中要用到一个常量,则在用的地方加上一句注释,说明某某常量已定义即可,不必在前面补上#define XXXX。

主函数

  • 写出自己的函数说明(函数体)
  • 写清楚函数的接口
    • 何为函数接口
      • 可以理解为函数的入口和出口
      • 函数定义中的形参表可以理解为函数入口。
      • 函数体中的输出语句和返回值部分可以理解为函数出口。

C与C++语言基础

数据类型

基本数据类型

  • 整形
    • int、long、…考研中涉及整数的题目,如果没有特殊要求用int
    • 字符型char
    • 浮点型float、double、…对于处理小数的题目,在题目没有特殊要求的情况下用float

结构型

结构型可以理解为用户用已有数据类型(int,char,float)为原料制作的数据类型。

  • 结构体
    • 结构体是系统提供给程序员制作新的数据类型的一种机制,即可用系统已有的不同的基本数据类型或用户自定义的结构型,组合成用户需要的复杂数据类型。

typedef struct
{
 int a;
 char b;
 float c; 
}TypeA;

指针型

指针型变量里装的是变量的地址,通过它可以找出这个变量在内存中的位置,故名为指针型。
'*‘相当于取变量内容,*a就是取变量a存储的地址所在内存单元上的内容。’&'相当于取变量地址,&b就是取变量b的地址。

#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
    int a=0;
    int b=1;
    int *c;
    int *d;
    cout<<"a和b的地址:"<<&a<<" "<<&b<<endl;
    cout<<"未給c和d赋值时c,d随机指向的地址:"<<c<<" "<<d<<endl;
    c=&a;
    d=&b;
    cout<<"c,d指向的地址即a和b的地址:"<<c<<" "<<d<<endl;

    cout<<"a和b的值:"<<*c<<" "<<*d<<endl;

    cout<<"c和d的地址:"<<&c<<" "<<&d<<endl;

    cout<<"取c和d的地址上的存储的值即a和b的地址:"<<*&c<<" "<<*&d<<endl;

     cout<<"取c和d的地址上的存储的值即a和b的地址,并取该地址上的值即a和b的值:"<<*(*&c)<<" "<<*(*&d)<<endl;

}

结点的构造

链表节点的定义

设结点有两个域:一个是数据域,用来存放数据;另一个是指针域,用来存放下一个结点的位置。
链表结点的结构型如下:

typedef struct Node
{
 int data;
 struct Node *next;
}Node;
二叉树结点的定义

typedef struct BTNode
{
 int data;
 struct BTNode *lchild;
 struct BTNode *rchild;
}BTNode;
Typedef别名的知识回顾

Typedef关键字的作用就是为变量类型起个别名。

typedef struct Node
{
 int data;
 struct Node *next;
}Node;//别名位置

此结构体变量类型实际的名字应为:struct Node
使用此变量类型定义一个名为"stu1"的变量

struct Node stu1;

使用typedef为此变量类型定义别名"Node"后,“Node"等价于"struct Node”
用别名为此变量类型定义一个名为"stu2"的变量

Node stu2;
malloc()函数的使用

用以定义的结构体类型来制作新的结点,以二叉树为例

① BTNode BT;
② BTNode *BT;
BT=(BTNode*)malloc(sizeof(BTNode));

sizeof()计算结点类型所占空间大小的运算符,malloc()申请结点的内存空间。方法②过程:先利用sizeof计算结点所需的内存空间大小,再交给malloc取申请内存,最后将BT指针指向该内存。
使用malloc()函数模板

p=(  *)malloc(sizeof(  ));

将任意类型填入括号内即可生成新结点,此方法天勤考研建议熟记!

  • 方法②的优点
    • 方法②中的BT必要时可以离开这个结点转向其他结点,而方法①则不行。
  • 方法①和②的用法不同点
    • 方法①取值域:BT.data;
    • 方法②取值域:BT->data;或(*BT).data

函数

考虑被传入是参数是否发生改变

int a;
void f(int x){
++x;
}
a=0;
f(a);

此例中a的值是不会发生改变的,在f(a)函数入口a只是把值赋给了形参x,随后函数只对内部变量形参x进行了++x操作,所以a的值没有发生改变。

如何使传入参数发生改变?

普通变量引用型传参

int a=0;
void f(int &x)
{
 ++x;
}
f(a);

相当于a取代了x的位置(此时x就没有实际内存空间只是a的别名),函数f()就是在对a本身进行操作。

指针型变量引用型传参

要对传入的指针进行改变

void f(int *&x)
{
 ++x;
}

执行完函数后,指针x的值自增1。可以这样理解:&x取出指针x自己的地址,*&x取出指针x的内容。

地址传参

    void Exchg2(int *px, int *py)
   {
     int tmp = *px;
     *px = *py;
     *py = tmp;
   }
    Exchg2(&a,&b);

三种传参实例

#include<stdio.h>
#include<iostream>
using namespace std;
    void f(int &x)//引用传参
    {
        ++x;
    }

    void ff(int *&x)//指针传参
    {
        ++x;
    }
    void Exchg2(int *px, int *py)//地址传参
   {
     int tmp = *px;
     *px = *py;
     *py = tmp;
   }
int main(){
    int a=0;
    int b=2;
    int *c;
    int *d;
    c=&a;
    d=&b;


    cout<<"a和b的值:"<<*c<<" "<<*d<<endl;

    cout<<"c和d的地址:"<<&c<<" "<<&d<<endl;

    cout<<"取c和d的地址上的存储的值即a和b的地址:"<<*&c<<" "<<*&d<<endl;

     cout<<"取c和d的地址上的存储的值即a和b的地址,并取该地址上的值即a和b的值:"<<*(*&c)<<" "<<*(*&d)<<endl;

     f(a);
     ff(d);
    cout<<"a和b的值:"<<a<<" "<<b<<endl;

    cout<<"c和d的地址:"<<&c<<" "<<&d<<endl;

    cout<<"取c和d(自增后)的地址上的存储的值即a和b(自增后)的地址:"<<*&c<<" "<<*&d<<endl;

    Exchg2(&a,&b);

    cout<<"a和b的值:"<<a<<" "<<b<<endl;



}

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值