考研数据结构前置知识点-C语言补充

一、数组

​ 数组是存放一组相同类型元素的集合。

1、数组的创建

数组类型 数组名[数组长度];  int char double float long 
//创建实例
int arr[10];
//实例2
define X 10
int arr1[X];
//定义其他类型数组
char arr2[10];
double arr3[10];
//注:数组进行创建时,[]中必须给一个常量,不能使用变量。可以使用宏定义
//错误示例
int a;
scanf("%d",&a);
int arr4[a];	//数组的长度必须事先定义好,这样写法是不正确的

2、数组的初始化

int arr1[5] = {12345};   arr1[5] = 5
int arr2[5] = {1,2,3}; //自动补0   arr2 = {1, 2, 3, 0, 0 }
int arr3[] = {1,2,3,4} //长度为4

3、内存中的存储

​ 数组在内存中是连续存储的。可以根据数组首元素获取数组在内存中开始的地址。数组中每一个元素的大小都是固定的,可以根据元素的下标来计算出对应元素的地址。

​ a[0] 10

例:int a[10],首地址为10,每个元素为int类型占4个字节大小,a[1]的地址为14,a[2]的地址为18,a[9]的地址为4

4、二维数组

创建:
int arr1[3][4];//[行数][列数]
char arr2[][5];
double arr3[2][4];

​ 二维数组创建时,行数可以忽略不写。并且所有维度的数组其第一个方括号的内容可忽略。

初始化:
int arr1[3][4] = {1,2,3,4};
int arr2[3][4] = {{1,2},{4,5}};
int arr3[][4] = {{2,3},{4,5}};

​ 花括号中的一个花括号代表一个一维数组的初始化。当里面无花括号分组时,按照顺序从第一个开始逐个进行初始化。余下的未赋值的元素用0初始化。

#include 
int main()
{
	int arr[3][4] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			arr[i][j] = i * 4 + j;
		}
	}
    
    a[0][0] = 0
    a[0][1] = 1
    a[1][0] = 4
    a[1][1] = 5
    a[2][1] = 9
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			printf("%d ", arr[i][j]);
		}
	}
	return 0;
}

​ 二维数组在内存中也是连续存储的。在形式上是一个二维,实际上是按照一维数组的形式在内存中存储的

真题:设二维数组A[1...100][1...100],按行优先顺序存储在一维数组B[1...10000],每个元素占1个字节,则二维数组A[73][84]在一维数组B中的下标为()。
A、7384	B、7283	C、8372	D、8473      73*100+84 = 7384
真题:数组A[0...7][0...9]的每个元素占8个字节,将其按列优先存储在起始地址为2000的内存单元,则元素A[6][7]的地址是()。
A、2496	B、2336	C、2376	D、2632     (6*10 + 8 - 1)*8 + 2000
#include 
int main()
{  
	int i, a[10];
	for(i=9;i>=0;i--)  
		a[i]=10-i;
	printf(%d%d%d”,a[2],a[5],a[8]);
    return 0
}
852
#include 
int  m[3][3]={{1},{2},{3}};
int  n[3][3]={1, 2 ,3};
main( )
{  
	printf(%d,, m[1][0]+n[0][0]); 2+1
    printf(%d\n”,m[0][1]+n[1][0]); 0+0
}
#include 
main()
{ 
	int i;
	int x[3][3]={1,2,3,4,5,6,7,8,9};
  	for (i=1; i<3; i++)
		printf("%d ",x[i][3-i]);  x[1][2] = 6   x[2][1] = 8
 } 

852 3,0 6 8

二、函数

函数类型 函数名(函数参数)
{
	函数体
	return
}

//有返回值
int add(int a,int b)
{
	return a+b
}

//无返回值
void add1(int a,int b)
{
	print("%d",a+b)
}

//无参数
void fun()
{
    print("无参数函数")
}

//调用
a = add(1,2)  //a为3
add1(2,3)  //直接输出5
fun()    //输出“无参数函数”

三、指针

​ 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。

int p; //这是一个普通的整型变量 
int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针 

1、指针类型

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:

(1)int *ptr;		//指针的类型是int*,指针指向的类型是int,占4个字节
(2)char *ptr;		//指针的类型是char*,指针指向的类型是char,占1个字节
(3)int **ptr;		//指针的类型是int**

2、指针运算

int *p, a = 3; 
p = &a;
print("%d",*p)  //3
*p = 4
print("%d",a)	//输出4

int *q;
q = p;
print("%d",*q)	// 输出4

​ 将整型变量a的地址赋给整型指针p,使指针p指向变量a。也就是说,用运算符&取变量a的地址,并将这个地址值作为指针p的值,使指针p指向变量a。

指针的类型和它所指向变量的类型必须相同。

int array[5]={12345}; 
int *p=array; 
for(i=0; i<5; i++) 
{ 
    (*p)++; 
    p++;
} 
//array[5] = {2,3,4,5,6}

四、结构体

​ 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。

​ 数组是具有相同类型的数据构成的数据集合。

#include 

struct student //结构体类型的说明与定义分开。声明
{
    int age;  	/*年龄*/
    float score; 	/*分数*/
    char sex;   	/*性别*/
};

int main ()
{
    struct student a = { 20, 79, 'f'}; //定义
    printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );
	return 0;
}
//单链表结构体类型      2分
typedef struct LNode{
	int data;				//结点域
	struct LNode *next;		//指针域
}LNode, *LinkList;

LNode *p;   定义结点   
LinkList L;    定义链表
p->next    p->data
L->next    L->data
//二叉树结构体类型   2分
typedef struct BiTNode{
	int data;							//结点域
	struct BiTNode  *lchild, *rchild;	//左右指针
}BiTNode, *BiTree;

五、学习方法

数据结构:三步走。第四章串 不考。

1、第一遍过基础知识点,重点做选择题,大题编程题可不做。算法基础过程,基础实现必须了解。

2、第二遍重点放在编程题上,做第一遍做错的选择题。编程题需要自己手写出来。线性表,队列、栈,二叉树,排序、查找。

3、第三遍过一遍课本,去查缺补漏,以及之前有问题的题在重新做一遍。

操作系统:概念知识点比较多,重点理解,记忆。

1、第一遍看视频,过基础知识点,做课后题。pv操作伪代码可以先剩下。选择全做,大题不用做408真题。

2、第二遍,重点大题 + 选择题

3、第三遍,查缺补漏,过课本。

55过来

i = 0
while(i < n)
{
	j = 1
	while (j < n)
	{
		j = j*2
	}
}
n次  o(n)     o(nlg2n)


for(int i = 0; i

你可能感兴趣的:(考研计算机复试,数据结构,c语言,链表)