计算机软件技术基础知识点储备.docx
- 文档编号:417467
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:15
- 大小:31.73KB
计算机软件技术基础知识点储备.docx
《计算机软件技术基础知识点储备.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础知识点储备.docx(15页珍藏版)》请在冰豆网上搜索。
计算机软件技术基础知识点储备
第一章:
概述
1、程序=算法+数据结构
2、算法的几个基本特征:
能行性确定性有穷性拥有足够的情报
3、算法的复杂度主要包括:
时间复杂度和空间复杂度
第二章:
数据结构
1、逻辑结构:
数据集合中各数据元素之间所固有的逻辑关系(集合结构、线性结构、树形结构、图状结构),可以看作是从具体问题抽象出来的数据模型。
2、物理(存储)结构:
在对数据进行处理时,各数据元素在计算机中的存储关系,可分为以下四种:
顺序存储结构(存储空间连续)、链式存储结构、索引结构、散列结构
3、数据结构的运算是指对数据结构中的结点进行操作的集合,包括插入、删除、更新、检索、排序等。
4、数据元素是数据的基本单位
5、有时数据元素可由若干个数据项(数据的属性)组成,在这种情况下,数据项组成的数据元素称为记录,数据项是具有独立含义的最小标识单位,不可分割
6、顺序存储结构:
通常定义一维数组来表示线性表的顺序存储空间
7、顺序表的插入
异常处理:
(m为线性表的空间大小,n为线性表的长度<=m,插入的位置为i,i表示在第i个元素之前插入)
1当存储空间已满(即n=m)时为上溢错误,不能进行插入,算法结束;
2当i>n时,认为在最后一个元素之后(即第n+1个元素之前)插入;
3当i<1时,认为在第1个元素之前插入
函数的代码实现:
voidinsert(int*v,intm,intn,inti,intb)
{
intk;
if(n==m)cout<<”出现上溢错误!
”< 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) { intk; 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; 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; p->next=q->next; q->next=p; } 13、单链表的删除函数实现 删除包换元素x的结点 voiddelete(intx) { node*p,*q; if(head==NULL)cout<<”没有要删除的元素! ”< if((head->number)==x) { p=head->next; deletehead; head=p; } q=head; while(((q->next)! =NULL)&&(((q->next)->number)! =x)) q=q->next; if(q->next==NULL)cout<<”没有要删除的元素! ”< p=q->next; q->next=p->next; deletep; } 14、循环链表的插入函数实现 在包含元素x的结点前插入新元素b voidinsert(intx,intb) { node*p,*q; p=newcode; p->number=b; q=head; while((q->next! =NULL)&&(((q->next)->numbe)r! =x)) q=q->next; p->next=q->next; q->next=p; } 15、循环链表的删除函数实现 删除包含元素x的结点 voiddelete(intx) { node*p,*q; q=head; while((q->next! =NULL)&&(((q->next)->number)! =x)) q=q->next; if(q->next==head)cout<<”没有要删除的元素”< p=q->next; q->next=p->next; deletep; } 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) { cout< qian(p->lchild); qian(p->rchild); } } ⑵中序遍历 voidzhong_ma() { node*p; p=BT; zhong(p); cout< } staticzhong(node*p) { if(p! =NULL) { zhong(p->lchild); cout< zhong(p->rchild); } } ⑶后续遍历 voidhou_ma() { node*p; p=BT; hou(p); cout< } statichou(node*p) { if(p! =NULL) { hou(p->lchild); hou(p->rchild); cout< } } 25、有序树转二叉树最最简便的方法 对于有序树中的每一个结点,保留与其第一个子结点(即最左边的子结点)的链接,断开与其他子结点的链接,且将其他子结点依次链接在第一个子结点的右边。 26、private后边的叫数据成员(私有变量),public后边的叫成员函数,其中函数名与类名完全相同,并且无返回值(void也不能加)的叫构造函数,这个知识点老师说占4分的分值,而且老师还说一打眼就可以看出答案来的,方法我都告诉小超了呢。 第三章: 查找与排序 1、无序表只能用顺序查找,有序表可用对分查找,分块查找时,各子表的长度可以相等,也可以互相不等,但要求后一个子表中的每一个元素均大于前一个子表中的所有元素。 2、查找效率比较: 顺序查找<分块查找<对分查找<哈希表查找 3、有序表的插入函数 voidinsert(int*v,intm,intn,intx) { intk; if(n==m)cout<<”出现上溢错误! ”< k=n-1; while(v[k]>x) { v[k+1]=v[k]; k=k-1; } v[k+1]=x; n=n+1; } 4、有序表的删除函数 voiddelete(int*v,intm,intn,inti) { intk; if(n==0)cout<<”出现下溢错误! ”< if((i<1)||(i>n))cout<<”线性表里不存在该元素,不进行删除操作! ”< for(k=i;k<=n;k++) v[k-1]=v[k]; n=n-1; } 5、有序表的对分查找函数 intsearch(intx,intn) { inti,j,k; i=1; j=n; while(i<=j) { k=(i+j)/2; if(v[k-1]==x)cout< 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 for(j=0;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) ⑵将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];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 技术 基础 知识点 储备
![提示](https://static.bdocx.com/images/bang_tan.gif)