C语言版数据结构知识点大全,数据结构之C语言重要知识点复习

1,自加自减运算(单目运算)

说明:

(1)运算对象只能是一个变量

2++; /*Error*/

(2)前置是先运算,后引用,而后置是先引用后运算

int i,x;i = 5;x = i++; /*x=i;i=i+1*/i=5;x = ++i; /*i=i+1;x=i;*/

2,运算的优先级

(1)

第一原则:单目运算的优先级高于双目运算

x=*p++ x=*(p++) x=*p,p=p+1x=*++p x=*(++p) p=p+1,x=*p

第二原则:算术运算->关系运算->逻辑运算->赋值运算

a+b>c&&c!=0 ((a+b>c)&&(c!=0))

(2)优先级总表

级别

运算符

结合顺序

1

() [] ->

从左向右

2

! - ++ -- (type) sizeof * &

从右向左

3

* / %

从左向右

4

+ -

从左向右

5

<< >>

从左向右

6

< <= > >=

从左向右

7

== !=

从左向右

8

&

从左向右

9

^

从左向右

10

|

从左向右

11

&&

从左向右

12

||

从左向右

13

? :

从右向左

14

= op=

从右向左

15

,

从左向右

3,三种循环

(1)while循环(当型循环)

**格式:

while(条件表达式)

语句;

表达式:值非0,表示满足条件;值为0,代表不满足条件

语句(复合语句):重复执行部分(循环体)

**流程图:

1557411418551

**举例:

//求s=1+2+3+4+...+100#includevoid main(void){int s=0,i=1;while(i<=100){s=s+i;//s+=i;i++;}printf("s=%d\n",s);}

(2)do-while循环(直到型循环)

**格式:

do{

语句;}

while(条件表达式);

**流程图:

1557411792125

**while循环与do-while循环的区别:

while循环先判断条件,后执行循环体;

do-while循环先执行循环体,后判断条件

**举例:

//求30!#includevoid main(void){float s=1.0;int i=1;do{s*=i;i++;}while(i<=30);printf("301=%f",s);}

(3),for循环

**格式:

for(e1;e2;e3)

statement;

e1:初值表达式

e2:测试表达式

e3:增值表达式

**流程:

1557412308338

**举例:

//求:s=1+2+3+...+100#includevoid main(void){int s,i;for(s=0,i=1;i<=100;i++){s=s+i;}printf("s=%d",s);}

**注意:在for循环中,e1,e2,e3都可以省略。

(4),无限循环和空循环

**条件为恒真的循环-无限循环

while(1){...}do{...}while(1);//靠条件控制的break语句退出循环for( ; ; ){...}

//例:程序等待直到输入字母Afor(;;){ch=getchar();if(ch=='A')break;}

**循环体为空语句的循环-空循环

for(i=1;i<=MAX;t++);//作用:程序延时

4,字符串的比较strcmp(str1,str2)

作用:对str1和str2进行逐位无符号字符比较,直到对应位字符能够确定关系或到串尾为止。返回整型比较结果。

字符的数值关系及是字符的ASCII码值的数值关系。

比较结果

strcmp的值

str1

<0

str1==str2

==0

str1>str2

>0

char str1[]={"abcd"};char str2[]={"abcd"};int iRe1,iRe2,iRe3;iRe1=strcmp(str1,"abdc");iRe2=strcmp(str1,str2);iRe3=strcmp("abcde",str2);

5,数组的常用算法

数组是同类型数据的集合。便于整体处理数据,数组操作的主要算法有:

(1)求极值;

(2)排序;

(3)查找;

6,指针

C语言的指针支持:

#include void main (void ){int x ,*p;x=55;p=&x;printf ( “ %d, %u ”, x, *p) ;*p=65;printf ( “ %d, %u”, x, *p) ;}//int *p; *p=2; /* Error!*/

(1)指针必须指向对象后,才能引用。(2)&和*为互补运算。

7,指针与数组

数组是同类型的变量的集合,各元素按下标的特定顺序占据一

(1)指针与一维数组

通过指针引用数组元素可以分以下三个步骤:

**说明指针和数组

int *p,a[10];

**指针指向数组

p=a; /*指向数组的首地址*/p=&a[0]; /*指向数组的首地址*/

**通过指针引用数组元素

(2)引用数组元素

**三种方法:

下标法:   a[ i ]

指针法:   *(p+i)

数组名法:*(a+i)

a=p; /*Error!*/

8,动态分配函数 ()

sizeof(x):计算变量x的长度

free(p):释放指针p所指变量的存储空间,即彻底删除一个变量

9,参数传递

(1)函数调用时传送给形参表的实参必须与形参在类型、个数、顺序上保持一致

10,结构体

(1)struct   结构名{

type   成员1 ;

type   成员2 ;

type   成员n ;

};

struct:结构标志

结构名:用标识符命名的结构类型名

(2)结构的定义确定了如下两点:

定义结构类型,确定结构中的成员项的名称及类型。

指明该结构类型的变量在内存中的组织形式。

struct Book {char no[15];char name[50];float price;};struct Book b[10]; //正确

struct {char no[15];char name[50];float price;} Book;struct Book b[10]; //错误

typedef struct {char no[15];char name[50];float price;}Book;Book b[10]; //正确

11,结构指针

方式一:(*p).成员项名

方式二:p->成员项名

typedef struct LNode{ElemType data; //数据域struct LNode *next; //指针域}LNode,*LinkList;// *LinkList为Lnode类型的指针

LNode *p LinkList p

12,总结

(1)从编译器的角度理解C语言的语法规则和处理数据的方式

•int x,y,*p;(符号表,变量先定义后使用,定义后有内存单元)

•语句的语法,如赋值语句:x=a+b;(正确)   a+b=x;(错误)

•#define N 5; (后面有分号错误,因为N会被定义为“5;”)

•函数调用通过栈,函数内的局部变量作用域,函数参数传递

•在不同的函数中试图改变一个数据,可以通过:

函数return

指针

全局变量

(2)从机器执行的角度理解算法,将算法描述逐句变为程序

•依次: 循环(for,while),注意循环变量的初值和终值

•比较或分情况:分支(if,switch)

•移动:赋值(后移a[i+1]=a[i]; 前移:a[i-1]=a[i];)

•交换:三条赋值

•记录或保存变量的值:一条赋值

•对于链表,常用的三条语句如下:

p=L->next; //p指向首元结点while(p!=NULL) //p未到表尾p=p->next; //p指向下一个结点

另外,指针保留技术:

q=p;p=p->next;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值