计算机软件技术基础知识点储备Word文档格式.docx
《计算机软件技术基础知识点储备Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础知识点储备Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
![计算机软件技术基础知识点储备Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/9/443a16d3-2ccd-467c-8495-60946bf59fed/443a16d3-2ccd-467c-8495-60946bf59fed1.gif)
n时,认为在最后一个元素之后(即第n+1个元素之前)插入;
3当i<
1时,认为在第1个元素之前插入
函数的代码实现:
voidinsert(int*v,intm,intn,inti,intb)
{
intk;
if(n==m)cout<
<
”出现上溢错误!
”<
endl;
if(i>
n)i=n+1;
if(i<
1)i=1;
for(k=n;
k>
=i;
k--)
v[k]=v[k-1];
v[i-1]=b;
n=n+1;
}
8、顺序表的删除
1当线性表为空(即n=0)时为下溢错误,不能进行删除,算法结束;
2当i<
1或i>
n时,认为不存在该元素,不进行删除。
voiddelete(int*v,intm,intn,inti)
if(n==0)cout<
”出现下溢错误!
if((i<
1)||(i>
n))cout<
”线性表里不存在该元素,不进行删除操作!
for(k=i;
k<
=n;
k++)
v[k-1]=v[k];
n=n-1;
9、栈(相当于一个井)的相关概念
1先进后出(后进先出)
2栈顶允许插入与删除
3栈底不允许插入与删除
10、队列(相对于排队买饭)的相关概念
1先进先出
2队尾允许插入
3对头允许删除
11、链式存储每个结点由两部分组成:
数据域和指针域
12、单链表的插入函数实现
在包含元素x的结点前插入新元素b
voidinsert(intx,intb)
node*p,*q;
p=newnode;
p->
number=b;
if(head==NULL)
head=p;
next=NULL;
if(head->
number==x)
P->
next=head;
Head=p;
q=head;
while((q->
next!
=NULL)&
&
(((q->
next)->
number)!
=x))
q=q->
next;
next=q->
q->
next=p;
13、单链表的删除函数实现
删除包换元素x的结点
voiddelete(intx)
if(head==NULL)cout<
”没有要删除的元素!
if((head->
number)==x)
p=head->
deletehead;
q=head;
while(((q->
next)!
if(q->
next==NULL)cout<
p=q->
next=p->
deletep;
14、循环链表的插入函数实现
p=newcode;
numbe)r!
15、循环链表的删除函数实现
删除包含元素x的结点
next==head)cout<
”没有要删除的元素”<
16、单链表与循环链表的区别
单链表的头指针指向线性表第一个元素的结点;
而循环链表的头指针指向表头结点,表头结点的指针域指向链表的第一个结点。
单链表的最后结点的指针域为空;
而循环链表最后结点的指针域指向表头结点.
17、下三角矩阵的压缩存储
(以行为主压缩)
(以列为主压缩)
18、对称矩阵的压缩
19、索引存储的方式
顺序—索引—顺序、顺序—索引—链接、链接—索引—顺序、链接—索引—链接
20、二叉树的性质
⑴在二叉树的第k层上,最多有2k-1(k≥1)个结点
⑵深度为m的二叉树最多有2m-1个结点(深度即为层数)
⑶在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个
⑷具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分
21、满二叉树是指每层的结点都有两个子结点,满的不行不行的了,完全二叉数是指最后一层必须是从左至右的顺序断了线的,其余层都是满的。
22、前序遍历、中序遍历、后续遍历(前中后对应的是根结点的访问顺序)
前序遍历:
先根结点,再左再右
中序遍历:
先左,再根结点,再右
后续遍历:
先左,再右,再根结点
23、若给出三种遍历中的任意两种遍历,要求写出第三种遍历,思路如下:
先正确画出对应的二叉树,根据已给条件进行验证,最后写出第三种遍历
24、三种遍历的程序实现
⑴前序遍历
voidqian_ma()
node*p;
p=BT;
pre(p);
cout<
staticqian(node*p)
if(p!
=NULL)
number<
””;
qian(p->
lchild);
rchild);
⑵中序遍历
voidzhong_ma()
zhong(p);
staticzhong(node*p)
if(p!
zhong(p->
⑶后续遍历
voidhou_ma()
hou(p);
statichou(node*p)
hou(p->
25、有序树转二叉树最最简便的方法
对于有序树中的每一个结点,保留与其第一个子结点(即最左边的子结点)的链接,断开与其他子结点的链接,且将其他子结点依次链接在第一个子结点的右边。
26、private后边的叫数据成员(私有变量),public后边的叫成员函数,其中函数名与类名完全相同,并且无返回值(void也不能加)的叫构造函数,这个知识点老师说占4分的分值,而且老师还说一打眼就可以看出答案来的,方法我都告诉小超了呢。
第三章:
查找与排序
1、无序表只能用顺序查找,有序表可用对分查找,分块查找时,各子表的长度可以相等,也可以互相不等,但要求后一个子表中的每一个元素均大于前一个子表中的所有元素。
2、查找效率比较:
顺序查找<
分块查找<
对分查找<
哈希表查找
3、有序表的插入函数
voidinsert(int*v,intm,intn,intx)
k=n-1;
while(v[k]>
x)
v[k+1]=v[k];
k=k-1;
v[k+1]=x;
4、有序表的删除函数
5、有序表的对分查找函数
intsearch(intx,intn)
inti,j,k;
i=1;
j=n;
while(i<
=j)
k=(i+j)/2;
if(v[k-1]==x)cout<
v[k-1];
return(k-1);
if(v[k-1]>
x)j=k-1;
elsei=k-1;
return(-1);
6、冒泡排序的原理以及程序实现
原理:
相邻两个元素比较大小,要是大,往后移,要是小,不要动,这样每进行一次就可以把最大的那个移到末尾了
程序实现:
voidmaopao(int*s,intn)
inti,j;
inttemp;
for(i=1;
i<
n;
i++)
for(j=0;
j<
n-I;
j++)
if(s[j]>
s[j+1])
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
7、快速排序的原理以及程序实现
我明白快速排序了,在考试的时候,老师已经明确说了将第一个元素作为关键字,所以这样的话,将第一个元素设为p(k),并将p(k)的值赋给T,然后设置两个指针i和j分别指向表的起始与最后的位置。
反复作以下两步:
⑴将j逐渐减小,并逐次比较P(j)与T,直到发现一个P(j)<
T为止,将P(j)移到P(i)的位置上。
⑵将i逐渐增大,并逐次比较P(i)与T,直到发现一个P(i)>
T为止,将P(i)移到P(j)的位置上。
上述两个操作交替进行,直到指针i与j指向同一个位置(即i=j)为止,此时将T移到P(i)(即P(j))的位置上。
voidquick(int*p,intn)
intm,i;
int*s;
i=split(p,n);
quick(p,i);
s=p+(i+1);
m=n-(i+1);
quick(s,m);
staticintspilt(int*p,intn)
inti,j,k,l;
intT;
i=0;
j=n-1;
T=p[0];