数据结构
第一节 预备知识
编译软件及语言
- 基于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-
- 如何一个指针变量(假定为p)存放了某个普通变量(假定为i)的地址,那我们就可以说:“p指向了i”, 但p与i是两个不同的变量;
- p等价于i 或者说p可以与i在任何地方互换;
- 如果一个指针变量指向了某个普通变量,则*指针变量 就完全等价于 该普通变量
指针变量也是变量,只不过它存放的不能是内存单元的内容,只能存放内存单元的地址;
普通变量前不能加*;
常量和表达式前不能加&。
-
-
如何通过被调函数修改主调函数中的普通变量的值:
- 实参为相关变量的地址;
- 形参为以该变量的类型为类型的指针变量;
- 在被调函数中通过
*形参变量名
的方式可以修改主函数相关变量的值。
-
如何使用结构体:
-
struct Student st = {12, 52 "lalala"};
-
struct Student *pst;
-
- st.id
-
-
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
*/