线性表学习(3)

来源:互联网 发布:mysql front 注释乱码 编辑:程序博客网 时间:2024/05/19 06:49

1、       线性表L=(a1,a2……an),除第一个元素和最后一个元素外,其余每个元素都有且仅有一个直接前驱和直接后继。

 

2、       队列添加元素在队尾,删除元素在队头。添加元素尾指针rear+1;删除元素头指针front+1

 

循环队列中元素个数计算方法是固定的,即(-)%长度,但由于是循环队列所以尾可能会小于头,所以要加上长度,使尾-头保持是正整数,然后再对长度求余,即元素个数。

 

3、       数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j沿着链移动的操作为:j=r[j].next

分析:首先链表的下一个结点是用next指针访问,当前结点是r[j]r[j]是当前指针而不是指向当前结点的指针。

 

4、       

(1)对于一个基本有序的数组,插入排序比快速排序效率更高。

(2)假设T(n)是解决一个有n个元素问题的时间复杂度,T(n)=O(1),如果n=1 T(n)=2T(n/2)+O(1),如果n>1;那么T(n)O(n log n)参考学习点击打开链接

 

5、       1char[][]定义了两位字符数组,在JAVA中,使用字符串对char数组赋值,必须使用toCharArray()方法进行转换。

2JAVA中声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对数组给定长度。所以对String声明时有两种定义方式:String a[]String[] a

 

3)数组是一个引用类型变量,因为使用它定义一个变量时,仅仅定义了一个变量,这个引用变量还未指向任何有效内存,因此定义数组不能指定数组长度。

 

4Object类是所有类的父类。子类其实是一种特殊的父类,因此子类对象可以直接赋值给父类引用变量,无须强制转换,这也被称为向上转型,体现了多态思想。

 

6、       对一维数组a进行初始化的语句:int a[10]={10};

7、       在表长为n的顺序表上做插入运算,平均要移动的结点数位n/2

 

8、       声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是 int(*(*p)[10])(int *)

分析一:先看未定义标识符pP的左边是**p是一个指针,跳出括号,由于[]的结合性大于*,所以*p指向一个大小为10的数组,即 (*p)[10]。左边又有一个*号,修饰数组的元素,*(*p)[10]表示*p指向一个大小为10的数组,且每个数组的元素为一个指针。跳出括号,根据右边(int *)可以判断(*(*p)[10])是一个函数指针,该函数的参数是int *,返回值为int

 

分析二:

题目声明一个数组指针,一般我们想到的数组指针是随便来一个int (*p)[10];然后又说每个元素是一个函数指针,那么我们随便来一个函数指针int (*pf)(int *);然后把(*p)[10]作为一个整体替代pf,即int (*(*p)[10])(int *)

分析:判断一个复杂式子看最高优先级,*p是一个指针,然后(*p)外面是[],所以是数组指针,(*p)[10]描述完毕;

然后再看外面的int(*)(int *),很明显,这是一个函数指针,所以这个数组中每个元素是函数指针。

 

7、冒泡排序法,其在最坏情况下需要进行N(N-1)次运算,所以时间复杂度为n^2

 

9、       线性表的顺序存储中,元素直接的逻辑关系是通过元素在存储器中的相对位置确定的;在线性表的链式存储中,元素之间的逻辑关系是通过元素在存储器中的相对位置指针确定的。