软考软件设计师考试学习

一》  数据表示

原码反码补码与二进制表示的关系
总位数为N+1的码制 正数的表示 负数的表示 0+ 0-
原码 符号位为0,后N位为该数的N位二进制数 符号位为1,后N位为该数的N位二进制数    
反码 与原码相同 将其绝对值的原码所有位全部取反 0000 1111
补码 与原码相同 将其反码+1 0000 0000

二》  二叉树

完全二叉树:除了最后一层的右边可以不满,其他全满,不能留空。 非完全二叉树:~~~

平衡二叉树:要求任意的子树层数差小于1

哈夫曼树:是带权路径长度最短的二叉树,带权路径长度是各个节点的路径长度与权值乘积的和,与其相对应的有哈(霍?)夫曼编码

三》  哈希表

哈希函数可以理解为存储地址的key,但是一个key可能会会对应几个地址,所以一个数据的哈希值可能不是唯一的

四》  排序

1>直接插入排序  每次循环排一个数,后一次循环时在前面已经排序好的数里面找到合适位置插入循环到的数,直接排序是一种稳定的排序方式,时间复杂度时O(n2),空间复杂度为O(1)

void sort(int data[],int n)
{
    int i,j,tmp;
    for (i=1;i= 0&&data[j] > tmp;j--){
                data[j+1]=data[i];
            }
            data[j+1]=tmp;
        }
    }
}

2>冒泡排序 每次比较相邻的两个数,小的数放前面,循环到所有小的都在前面

 for(int i=0;ia[j+1]){
                    int temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }

3>简单选择排序 找所有数中最小的数,把最小的放前面,第二次找最小的就可以不用找第一个数了,在从第二个数开始找最小的数  循环这个过程

for(int i=0;ia[j]){
                    temp=a[j];
                    flag=j;
                }
            }
            if(flag!=i){
                a[flag]=a[i];
                a[i]=temp;
            }
        }

4>希尔排序  可以理解为分块的插入排序 具体代码暂时不会写~~~~~~

5>快速排序  先找中位数,以中位数为界把数据分为两组,将两组数据分别排序即可,具体代码也不会写

 

你可能感兴趣的:(软考软件设计师考试学习)