数据结构第一课(C语言基础知识)

为了使用C语言手撕数据结构,我们应首先对C语言有所了解,以下是博主挑的比较重要的一些知识点,相信对C语言基础不够好的童鞋有所帮助。

1. Hello World程序

#include <stdio.h>
void main(){
	//这是一个输出“Hello World!”的程序
    printf("Hello World!");
    /*运行结果为"Hello World!"*/
}

以上为使用C语言实现Hellow World的代码,其中

a)#include <stdio.h>#include为预处理指令,用以引用用户和系统头文件
b)<stdio.h>中包括了一些预定义的宏(可以理解为一些规则,从库中可以调用已经定义好的这些规则)和函数(如printf()就是stdio.h库中已经定义好的一个显示函数,用于显示""中的文字)
c)C语言中每一个语句后都以;(英文分号结尾)
d)可用///**/进行注释

2. 选择(判断)

#include <stdio.h>
void main(){
    int a,b;
    a=1,b=2;
    if(a>b){
        printf("%d\n",a);
    }else{
        printf("%d\n",b);
    }
}

以上代码用于实现判断,以输出a与b中的较大值,最终运行结果为2

以上代码功能可以用宏来实现:

#include <stdio.h>
#define Max(a,b) (a>b)?a:b
void main(){
    int a,b;
    a=1,b=2;
    printf("%d\n",Max(a,b));
}

运行结果当然还是2,但是要更简洁些,其中(a>b)?a:b表示如果a大于b的话结果为a,否则结果为b。

选择语句中经常会用到switch()语句,以避免多个if else语句的出现,使用例子如下(两版代码效果一致):
if else版:

#include <stdio.h>
void main(){
    int a;
    printf("请输入a的值:");
    scanf("%d",&a);//C语言中'&'表示取地址,这里表示读取输入的值
    if (a==1){
        printf("a==1\n");
    }else if(a==2){
        printf("a==2\n");
    }else if(a==3){
        printf("a==3\n");
    }else if(a==4){
        printf("a==4\n");
    }else if(a==5){
        printf("a==5\n");
    }else{
        printf("a!=1-5中的任何一个数!\n");
    }
}

switch版:

#include <stdio.h>
void main(){
    int a;
    printf("请输入a的值:");
    scanf("%d",&a);//C语言中'&'表示取地址,这里表示读取输入的值
    switch(a){
    case 1:
        printf("a==1\n");
        break;
    case 2:
        printf("a==2\n");
        break;
    case 3:
        printf("a==3\n");
        break;
    case 4:
        printf("a==4\n");
        break;
    case 5:
        printf("a==5\n");
        break;
    default:
        printf("a!=1-5中的任何一个数!\n");
        break;
    }
}

3. 循环

for 循环

for循环的主要使用方法为for(初始值;循环条件/*满足条件就循环*/;i累加){循环体},示例代码如下:

#include <stdio.h>
void main(){
    int i;
    for(i=0;i<10;i++){
        printf("%d\n",i);
    }
}

while 循环

while循环的主要使用方法为while(循环条件/*满足条件就循环*/){循环体},示例代码如下:

#include <stdio.h>
void main(){
    int i;
    i=0;
    while(i<10){
        printf("%d\n",i);
        i++;
    }
}

循环中如果需要跳出循环,可以使用break;如果什么都不需要做,可以使用continue,这里不再示例。

4. 数组

数组数据结构是同一类型数据的组合,这些数据在内存中是连续存储的。
在这里插入图片描述
如上图所示,我们可以将这个长方形理解为数组,框框下面的数字为坐标,即:C语言中数组的坐标是从0开始计数的。以上数组中我们访问元素会非常方便,但是如果我们想从中删掉或增加一个元素却非常不方便,这个问题我们将会在后面细讲。

数组的示例代码如下:

#include <stdio.h>
void main(){
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    int i;
    for(i=0;i<10;i++){
        printf("arr[%d]=%d\n",i,arr[i]);
    }
}

代码的运行结果为:

arr[0]=1
arr[1]=2
arr[2]=3
arr[3]=4
arr[4]=5
arr[5]=6
arr[6]=7
arr[7]=8
arr[8]=9
arr[9]=10

5. 指针

指针和我们在代码中使用的变量一样——都是变量,只不过指针用来存储内存地址。举一个可能不恰当的例子:
妈妈我要吃饭
饭在碗里

我们向妈妈要饭吃,但是妈妈并没有直接给我们饭,但告诉了我们饭在碗里,这里碗就充当指针的作用。

同理,我们在进行coding的时候,需要访问变量的时候不是直接去访问变量,而是先访问存储变量的地址,再通过地址来获取变量的值):

#include <stdio.h>
void main(){
    int num=8;
    int *p; //申明整型指针变量
    p=&num;//将a的地址存到指针p中
    printf("num 的存放地址:%p\n",p);
    printf("地址%p中存放的值为: %d\n",p,*p);
    int arr[3]={1,2,3};
    p=arr;
    printf("地址 %d 中存放的值为: %d\n",p,*p);
    p++;
    printf("地址 %d 中存放的值为: %d\n",p,*p);
    printf("地址 %d 中存放的值为: %d\n",p+1,*(p+1));
}

以上代码的执行结果为:

num 的存放地址:0060FEF8
地址0060FEF8中存放的值为: 8
地址 6356716 中存放的值为: 1
地址 6356720 中存放的值为: 2
地址 6356724 中存放的值为: 3

从中我们可以看出:
a)通过指针可以存放内存地址,通过内存地址可以访问出内存中存放的值即变量的值
b)int(整型)占4个字节
c)整型中的++运算和+1运算都是增加一个整型(4个字节)
d)数组中数组名就是数组的首地址(第0号元素所在地址)

6. 结构体

结构体是一种自定义的数据类型,它允许不同类型的变量一起存放,这不同于数组。

结构体的定义形式为

struct 结构体名{
	type 变量1;
	type 变量2;
	...
};

结构体的示例代码如下:

#include <stdio.h>
struct student{
    int id;
    char name[20];
    int phone;
    char address[40];
};
void main(){
    struct student st1,st2;
    /*初始化st1的信息*/
    st1.id=2020001;
    st1.phone=10086;
    strcpy(st1.name,"孙悟空");
    strcpy(st1.address,"花果山水帘洞");
    /*初始化st2的信息*/
    st2.id=2020002;
    st2.phone=10000;
    strcpy(st2.name,"猪八戒");
    strcpy(st2.address,"乌斯藏高老庄");
    /*输出学生st1的信息*/
    print_stu(st1);
    /*输出学生st1的信息*/
    print_stu(st2);
}
void print_stu(struct student st){
    printf("学号:%d\n",st.id);
    printf("姓名:%s\n",st.name);
    printf("电话:%d\n",st.phone);
    printf("地址:%s\n",st.address);
}

以上代码的运行结果为:

学号:2020001
姓名:孙悟空
电话:10086
地址:花果山水帘洞
学号:2020002
姓名:猪八戒
电话:10000
地址:乌斯藏高老庄

才疏学浅,难免有错误和不当之处,欢迎交流批评指正!
同时有问题的话欢迎留言或邮箱联系(ljt_IT@163.com)。

创作不易,觉得写得不错就微信扫码奖励一下吧!

Reward

  • 16
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值