数据结构代码详解/西安交通大学/算法设计与问题求解/C语言代码/A

非常非常基础的部分(有C语言基础的同学可以直接跳过)

基本数据类型

整型:short    int    long    long long    unsigned int     

浮点型:float    double

字符型:char

int h;
h=183;
double a=75.5;
char x='A';

指针:指针就是地址

/*
int a=150;
int*p; //此处表示定义了一个int类型的指针,名字叫p
p=&a;  //指针是指向a的
int*p,*q; //定义两个指针
*/

int a=50,b=30,c;
int *p,*q;
p=&a;
q=&b;

/*
*p就是代表指向的对象的值,可以这样简单的理解*p等价于a
*/

*p=15;

C语言中的结构体

对于单一一个变量,int,char,double等等就够用了,但是如果不同数据类型的变量凑一起呢?假如我们输入一个班的学生的数据,每个学生都包含名字(字符),成绩(浮点型),学号(整型)如下:

//自己定义的数据类型
struct Student{
  int a;
  double b;
  char c;
};

//用自己定义的数据类型去定义一个变量
struct student stu1;

//或者
struct Student{
  int a;
  double b;
  char c;
}stu1; //和上面等价

student是我们自己定义的一个新的数据类型的名字

!!!typedef的作用!!!

C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等,下面就来举例:

typedef int zhengxing;

int a;
zhengxing a; //这两行代码完全等价,zhengxing就是int的别名



struct student{
  int sno;
  double ds;
};
struct student Lihua;

//下面使用typedef
typedef struct student{  //这里student可以省略(有时候不能省略)
  int sno;
  double ds;
}xuesheng;  //typedef给struct student后面这一堆结构体换个名字
  xuesheng Lihua;

typedef在链表中的应用

typedef struct LNode{  //此处LNode不能删除
  int data;
  struct LNode *next;
}LNode;

LNode head;  //结点
LNode *p;
p=&head;
head.data=5; //对data赋值,和下面等价
p->data=4;  //通过指针对data赋值

C语言中的数组(有序,同类)

//静态定义数组
int a[5]; //静态定义,下标从0开始
a[0]=80; //赋值第一个数据

int b[5]={98,87,34,32,4}; //数组初始化
int c[]={2,3,4,5,6};


typedef struct student{
  int sno;
  double ds;
}stu;
stu a[10]; //数组的名字是a,一共有10个数据元素,数据元素的类型是stu
a[0].sno=100; //对a[10]数组的第一个元素a[0]的sno项进行赋值


//动态定义数组,使用malloc
int*p;
p=(int*)malloc(sizeof(int)*5);
//sizeof计算其后括号内所占字节数
//sizeof(int)计算int所占字节数,(sizeof(int)*5)=4*5=20个字节
//malloc动态分配内存,分配完后返回该部分的首地址
//返回的首地址并不能说明是什么类型的首地址,比如char,int,unsigned int,所以要告诉编译器,这个是int类型的地址,使用(int*)强制转换
p[0]=99;
p[1]=87;
//在C语言中,数组名b实际上就是一个指针常量,即数组第一个元素的地址,类型取决于数组元素的类型

C语言中的函数定义

举个例子:现在有两个数,a(int),b(int),现在要交换两个数的值

int temp;
temp=a;
a=b;
b=temp;

如果我们多次使用这样的运算,一直重复写会很麻烦,于是我们自己定义一个函数:

void Swap(int &a, int &b)  //void处是函数返回值的类型,void表示没有返回值
          //形参           //void如果是int,就表示返回值是int类型
                          //Swap是函数的名字
{
  int temp;
  temp=a;
  a=b;         //函数体
  b=temp;
  return;      //return表示函数结束
}

Swap(a,b);

C语言函数中的参数传递

1.值传递

形参:参数

实参:值

如果涉及main函数里值的改变的时候,不能用值传递,因为一旦定义的swap函数结束,将不会返回任何值给main函数

void swap(int a, int b)
{
  int temp;
  temp=a;
  a=b;
  b=temp;
  return;  //如果返回值是void类型,return可写可不写
}

void main()
{
  int x=5,y=3;
  swap(x,y);
  printf("x=%d,y=%d",x,y); //此处会发现打印出来的x,y并没有什么变化,仍然是x=5,y=3  
return;
}

2.地址传递

void swap(int*a, int*b)
{
  int temp;
  temp=*a;
  *a=*b;
  *b=temp;
  return;
}
void main()
{
  int x=5,y=3;
  swap(&x,&y);
  printf("x=%d,y=%d",x,y);
  return;
}

3.C++中的引用

当原来的函数的值有变化的时候,用引用这种方式&

引用就是给变量起个别名

int a=3;
int &b=a;
b=b-1  //此时b=3,a=3,a,b完全等价

&a是C++里的引用符号,别名和正式名共享同一块内存地址

下面的代码可以这样理解:

a是x的一个别名,b是y的一个别名,a,x共享同一个内存地址,b,y共享同一个内存地址

即使swap函数不会返回什么值,但是由于共享地址,swap函数在运行时就会同时改变x,y,a,b的值,返不返回值已经无所谓了

void swap(int &a,int &b)
{
  int temp;
  temp=a;
  a=b;
  b=temp;
  return;
}

void main()
{
  int x=5,y=3;
  swap(x,y);
  printf("x=%d,y=%d",x,y);
  return;
}

  • 32
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挣钱钱暴富富

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值