1.合并两个已排序的数组
/**
* @author iamzken
* 2015-8-28
* 合并两个有序数组
*
*/
public class Sorter2 {
public static void merge2SortedArray(int[] a , int[] b , int[] c){
//a数组的当前索引
int i = 0;
//b数组的当前索引
int j = 0;
//c数组的当前索引
int k = 0;
//循环,只要a和b都没有遍历完就一直循环
while(i < a.length && j < b.length){
//如果当前a[i]比b[j]小,就把c[k]元素置为a[i],同时k++,i++
if(a[i] < b[j]){
c[k++] = a[i++];
//否则,如果当前a[i]比b[j]大,就把c[k]元素置为b[j],同时k++,j++
}else{
c[k++] = b[j++];
}
}
//上个循环能够结束,说明a已经循环完或b已经循环完
//下述两个循环只能有一个满足循环条件
//只要a没有循环完,就把a中剩下的元素依次放入c中
while(i < a.length){
c[k++] = a[i++];
}
//只要b没有循环完,就把b中剩下的元素依次放入c中
while(j < b.length){
c[k++] = b[j++];
}
}
//测试程序
public static void main(String[] args) {
//待合并数组a
int[] a = new int[]{1,3,5,7,9};
//待合并数组b
int[] b = new int[]{2,4,6,8};
//c用来存放合并之后的数组
int[] c = new int[a.length+b.length];
merge2SortedArray(a, b, c);
for(int i = 0;i < c.length;i++){
System.out.print(c[i]+"\t");
}
}
}
2.【c/c++】【java】数组的大小也可以在运行时确定大小,即动态开辟空间。
3.由于广义表是对线性表和树的推广,并且具有共享和递归特性的广义表可以和有向图(见第7章)建立对应,因此广义表的大部分运算与这些数据结构上的运算类似。
在此,只讨论广义表的两个特殊的基本运算:取表头head(Ls)和取表尾tail(Ls)。
非空广义表的表头是一个元素,它可以是原子也可以是一个子表,而表尾则必定是表。例如:LS=(a,b),表头为a,表尾是(b)而不是b.另外:LS=(a)的表头为a,表尾为空表().
非空广义表,除表头外,其余元素构成的表称为表尾,所以非空广义表尾一定是个表
根据表头、表尾的定义可知:
任何一个非空广义表的表头是表中第一个元素,它可以是原子,也可以是子表,而其表尾必定是子表。
空表没表头和表尾
4 . 将对称矩阵中的n^2个元压缩存储在n(n+1)/2个元素的一维数组中,以行序为主序存储其下三角(包括对角线)中的元,假设一维数组sa[n(n+1)/2]作为n阶对称矩阵A的存储结构,则sa[k]和矩阵元素a[i,j]之间存在着一一对应的关系:
当i>=j时,k=i(i-1)/2+j-1;
当i< j时, k=j(j-1)/2+i-1;
5.
1.矩阵在内存中的存储
不管是D3D还是OpenGL,使用的矩阵都是线性代数标准的矩阵,只是在存储方式上有所不同。分别为:行主序(Direct3D),列主序(OpenGL)
存储顺序说明了线性代数中的矩阵如何在线性的内存数组中存储。
例如:内存中使用一个二维数组m存储矩阵,第i行第j列的表示方法分别为:
行主序:m[i][j]
列主序:m[j][i]
线性代数意义的同一个矩阵,在d3d 和 openGL 中的存储顺序
行优先和列优先
如下矩阵:
根据行优先的原则,其排序方式为
根据列优先的原则,其排序方式为
6.【c/c++】
声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针
/*
要声明一个数组指针, 一般我们想到的数组指针是 随便来一个 int(*p)[10],然后又说每个元素是一个函数指针,那么我们随便来一个 函数指针 int (*pf)(int *). 然后把(*p)[10]作为一个整体替代 pf
即 int(*(*p)[10]))(int *);
分析: 判断一个复杂式子看最高优先级的,*p是一个指针,然后(*p)外面是[],所以是数组指针,(*p)[10])描述完毕,然后再看外面int(*)(int *)很明显,这是一个函数指针,所以这个数组中每个元素是函数指针
7 .
将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1..298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()供选择的答案:
三对角矩阵有这样的特点: 只有对角线上以及对角线的两侧有值,其余元素为0.
所以,要存入B数组中的元素依次分别为A[1][1],A[1][2],A[2][1],A[2][2],A[2][3],A[3][2],A[3][3],A[3][4]....等,A6665 共有65 * 3 - 1 = 194个元素,而A6665是数组A第66行中有值的第一个元素,故其在B数组中的下标为195.
8.C语言中的字符串用指向该串首个字符的指针表示。不保存长度信息,用’\0’来标识字符串的终止。
因此相当于 char arrays[] = {‘C’, ‘h’, ‘i’, ‘n’, ‘a’, ‘\0’};
9.一个稀疏矩阵Am*n采用三元组形式表示
三元组做到下面三条便可实现矩阵的转置:
(1)将矩阵的行列值交换。
(2)将每个三元组中的 i 和 j 相互调换。
(3)重排三元组之间的次序。
前两条是容易做到的,关键是如何实现第三条。即如何使 b.data 中的三元组是以 T 的行(M 的列)为主次序依次排列的。
10.队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
11.稀疏矩阵在采用压缩存储后将会失去随机存储的功能。因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号做为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素。
12.矩阵乘法
计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。
13.用三元组表示该矩阵时,所需的字节数
每个元素要用行号,列号,元素值来表示,在用三元组表示稀疏矩阵,还要三个成员来记住,矩阵的行数列数,总的元素数
typedef struct{
int i; //行号
int j; //列号
elemtype d; //元素值
}
typedef struct{
int md; //行数
int nd; //列数
int td; //非零元个数
}