C语言循环与数据结构二叉树(部分)

565 阅读2分钟

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」。

main()

{

int  n[5] = {0,0,0},i,k = 2;

for(i = 0; i < k; i++)  n[i] = n[i] + 1;

printf("%d\n",n[k]);

}

 

答案为零

得到死循环

Int main()

{int i=0;

  while(i<10)

  {  if(i<1) continue;

//continue 跳过本次循环执行下一循环;

     if(i==5)break;

     i++;

  }

}

C语言中的模运算:E%s   s 除数  E被除数

 

 for循环的一般形式如下:

    for(表达式1; 表达式2; 表达式3) 循环体

    for循环的执行过程如下:

    1、计算表达式1;

    2、计算表达式2。若其值为非0,转步骤3;若其值为0,转步骤5;

    3、执行一次for循环体;

    4、计算表达式3,转向步骤2;

    5、结束循环。

for循环引起无限循环的条件

for(i=0;i<=10;i++)  {  ;  }

1.省略i<=10,可引起无限循环

2.省略i++,可引起无限循环        

3.圆括号()内三个表达式都省略,可引起无限循环        

关于while(条件表达式)循环体",

1.条件表达式的执行次数总是比循环体的执行次数多一次;

2,先判断条件是否成立,条件成立执行循环体 否则不执行。

关于do 循环体 while (条件表达式);

1,先执行循环体在判断条件,条件成立执行循环体 否则不执行。

2,条件表达式的执行次数与循环体的执行次数一样        

3,do-while语句的循环体至少执行一次        

 

while((ch=getchar())!='N') printf("%c ",ch);        

循环中的条件为当读入的字母不为N时,则执行循环体,当读入N时结束。

题目:

设有n个数按从大到小的顺序存放在数组x中,以下能使这n个数在x数组中的顺序变为从小到大的是

解析:

若想按照从小到大的顺序存放,只要把对称位置上的数值互换即可,i对称的位置是n-i-1,比较的次数是n/2。

Int t =0;

For(int I =0 ; i<n/2 ;i++){

t=X[i];

X[i]=x[n-i-1];

X[n-i-1]=t;

}

//计算m和n的最大公约数

int main()

{  int m,n;

   scanf("%d%d",&m,&n);

   while(m!=n)

   {   while(m>n){ m=m-n;}

       while(n>m){ n=n-m;}

   }

   printf("%d\n",m);

}

1.对于长度为n的线性表,在最坏情况下  需排序最坏的情况下需要比较多少次

冒泡排序需要经过n/2遍的从前往后扫描和n/2遍的从后往前扫描,需要比较次数为n(n-1)/2

快速排序法的最坏情况比较次数也是n(n-1)/2。

 

二分法

二分法查找只适用于顺序存储的有序表。

如果采用链式存储结构,也只能用顺序查找,

有序表

有序表是指线性表中的元素按值非递减排列(即从小到大,但允许相邻元素值相等)。

 

数据的逻辑结构

分为:线性结构与非线性结构

一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的

 

数据的存储结构为

顺序和链式是数据的存储结构

 

线性结构与非线性结构

线性结构的定义:① 有且只有一个根结点;② 每个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表

所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。

双链表  和 二叉树链表

双链表和二叉链表的结点都有两个指针域,前者是线性结构,后者是非线性结构。

 

只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构