数据结构——预备知识

数据结构

第一节 预备知识

编译软件及语言

  • 基于C语言学习;
  • 编辑器VC++6.0 (提取连接,提取码:ix5p);

预备知识

  • 数据结构

    • 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

    • 数据结构 = 数据存储 + 数据关系的存储。

  • 地址:地址是存储单元的编号;

  • 指针

    • 指针就是地址,地址就是指针;
    • 指针变量是存放指针内村单元地址的变量;

    • 指针是操作受限的非负整数;

    • 作用:

      —— 表示一些复杂的数据结构;

      —— 快速访问变量;

      —— 能否访问硬件;

      —— 使函数返回一个或者多个值

      —— 基本概念
      int i=10;
      int *p = &i; //等价于 int p; p = &i;
      详解这两部操作:
      1)、p存放了i的地址,所以我们说p指向了i
      2)、p和i是完全不同的两个变量,修改其中的任意一个变量的值,不会影响另一变量的值
      3)、p指向i,p就是i变量本身。更形象的说所有出现p的地方都可以换成i,所有出现i的地方都可以换成
      p

        1. 如何一个指针变量(假定为p)存放了某个普通变量(假定为i)的地址,那我们就可以说:“p指向了i”, 但p与i是两个不同的变量;
        2. p等价于i 或者说p可以与i在任何地方互换;
        3. 如果一个指针变量指向了某个普通变量,则*指针变量 就完全等价于 该普通变量

        指针变量也是变量,只不过它存放的不能是内存单元的内容,只能存放内存单元的地址;

        普通变量前不能加*;

        常量和表达式前不能加&。

    • 如何通过被调函数修改主调函数中的普通变量的值:

      1. 实参为相关变量的地址;
      2. 形参为以该变量的类型为类型的指针变量;
      3. 在被调函数中通过 *形参变量名的方式可以修改主函数相关变量的值。
  • 如何使用结构体:

    • struct Student st = {12, 52 "lalala"};

    • struct Student *pst;

        1. st.id
        1. pst -> &st

          pst所指向的结构体变量中的sid这个成员

          结构体不能加减乘除,只能相互赋值;

// 以下是关于结构的两种使用方式;

#include <stdio.h>
#include <string.h>

struct  Student{

	int sid;
	int sage;
	char sname[200];
};

void f(struct  Student * pst){

	(*pst).sid =20;
	strcpy(pst->sname,"wq");
	pst->sage = 24;
	
}

void g(struct  Student * pst){

	printf("The id is %d,the name is %s and the age is %d\n",
		pst->sage, pst->sname, pst->sid);

};

void g2(struct Student st){

	printf("The id is %d,the name is %s and the age is %d\n",st.sid, st.sname,st.sage);

}


void main(){

	struct Student st;

	//pst = &st;
	//pst -> sid =99; 
	//pst -> sid   <==> (*pst).sid = 99; <==>st.id;

	f(&st);
	g(&st);
	g2(st);
	//printf("The id is %d,the name is %s and the age is %d\n",st.sid ,st.sname,st.sage);
	
}
  • malloc函数使用
#include <stdio.h>
#include <malloc.h>

int main(void){

	int a[5] ={1,2,3,4,5};

	int len;
	printf("Please input buffer's length:len= ");
	scanf("%d",&len);
	int *Arra = (int *) malloc (sizeof(int*) *len);  //申请内存
	
	for (int i=0; i <len ;i++){

		scanf("%d",&Arra[i]);
	
	}

	for(i= 0; i<5;i++){
		
		printf("The buffer is:%d\n",*(Arra+i));
	}

	free(Arra);

	return 0;
}
/*
Please input buffer's length:len= 5
1 2 3 4 5
The buffer is:1
The buffer is:2
The buffer is:3
The buffer is:4
The buffer is:5
Press any key to continue
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值