合同范本|数据结构课件(经典15篇)
发布时间:2021-03-10数据结构课件(经典15篇)。
◍ 数据结构课件
一、单选题(每题 2 分,共20分)
1. 栈和队列的共同特点是( )。
A.只允许在端点处插入和删除元素
B.都是先进后出
C.都是先进先出
D.没有共同点
2. 用链接方式存储的队列,在进行插入运算时( ).
A. 仅修改头指针 B. 头、尾指针都要修改
C. 仅修改尾指针 D.头、尾指针可能都要修改
3. 以下数据结构中哪一个是非线性结构?( )
A. 队列 B. 栈 C. 线性表 D. 二叉树
4. 设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在
676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置?脚注(10)表示用10进制表示。
A.688 B.678 C.692 D.696
5. 树最适合用来表示( )。
A.有序数据元素 B.无序数据元素
C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据
6. 二叉树的第k层的结点数最多为( ).
kk-1 A.2-1 B.2K+1 C.2K-1 D. 2
7. 若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二
分查找,则查找A〔3〕的比较序列的下标依次为( )
A. 1,2,3 B. 9,5,2,3
C. 9,5,3 D. 9,4,2,3
8. 对n个记录的文件进行快速排序,所需要的辅助存储空间大致为
A. O(1) B. O(n) C. O(1og2n) D. O(n2)
9. 对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)
=K %9作为散列函数,则散列地址为1的元素有( )个,
A.1 B.2 C.3 D.4
10. 设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。
A.5 B.6 C.7 D.8
二、填空题(每空1分,共26分)
1. 通常从四个方面评价算法的质量:_________、_________、_________和_________。
2. 一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。
3. 假定一棵树的.广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数
为__________个,树的深度为___________,树的度为_________。
4. 后缀算式9 2 3 +- 10 2 / -的值为__________。中缀算式(3+4X)-2Y/3对应的后缀算式
为_______________________________。
5. 若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右孩子的两个指
针。在这种存储结构中,n个结点的二叉树共有________个指针域,其中有________个指针域是存放了地址,有________________个指针是空指针。
6. 对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点
分别有_______个和________个。
7. AOV网是一种___________________的图。
8. 在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有
向完全图中,包含有________条边。
9. 假定一个线性表为(12,23,74,55,63,40),若按Key % 4条件进行划分,使得同一余数的元
素成为一个子表,则得到的四个子表分别为____________________________、___________________、_______________________和__________________________。
10. 向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度
___________。
11. 在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序
过程的时间复杂度为________。
12. 在快速排序、堆排序、归并排序中,_________排序是稳定的。
三、计算题(每题 6 分,共24分)
1. 在如下数组A中链接存储了一个线性表,表头指针为A [0].next,试写出该线性表。
data next 2.
3. 已知一个图的顶点集V和边集E分别为:V={1,2,3,4,5,6,7};
E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,
(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};
用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。
4. 画出向小根堆中加入数据4, 2, 5, 8, 3时,每加入一个数据后堆的变化。
四、阅读算法(每题7分,共14分)
1. LinkList mynote(LinkList L)
{//L是不带头结点的单链表的头指针
if(L&&L->next){
q=L;L=L->next;p=L;
S1: while(p->next) p=p->next;
S2: p->next=q;q->next=NULL;
}
return L;
}
请回答下列问题:
(1)说明语句S1的功能;
(2)说明语句组S2的功能;
(3)设链表表示的线性表为(a1,a2
, ?,an),写出算法执行后的返回值所表示的线性表。
2. void ABC(BTNode * BT)
{
if BT {
ABC (BT->left);
ABC (BT->right);
cout
}
}
该算法的功能是:
五、算法填空(共8分)
二叉搜索树的查找递归算法:
bool Find(BTreeNode* BST,ElemType& item)
{
if (BST==NULL)
return false; //查找失败
else {
if (item==BST->data){
item=BST->data;//查找成功
return ___________;}
else if(itemdata)
return Find(______________,item); else return Find(_______________,item); }//if
}
六、编写算法(共8分)
统计出单链表HL中结点的值等于给定值X的结点数。 int CountX(LNode* HL,ElemType x)
◍ 数据结构课件
1. 线性表的顺序存储结构是一种 的存储结构,而链式存储结构是一种___的存储结构。
2. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址___。
3. 在一个单链表中p所指结点之前插入一个s (值为e)所指结点时,可执行如下操作:
q=head;
while (q->next!=p) q=q->next;
s= new Node; s->data=e;
4. 在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行____。
A. s->next=p->next; p->next=s; B. p->next=s->next; s->next=p;
C. q->next=s; s->next=p; D. p->next=s; s->next=q;
5. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行____。
A. s->next=p; p->next=s; B. s->next=p->next; p->next=s;
C. s->next=p->next; p=s; C. p->next=s; s->next=p;
6. 在一个单链表中,若删除p所指结点的后续结点,则执行____,
A. p->next= p->next->next; B. p= p->next; p->next= p->next->next;
C. p->next= p->next; D. p= p->next->next;
7. 链表不具备的特点是 ____ 。
C 无需事先估计存储空间大小 D 所需存储空间与线性表长度成正比
8. 在一个长度为n的顺序表中删除第i个元素,要移动 个元素。如果要在第i个元素前插入一个元素,要后移( )个元素。 N-I N-I+1
9. 以下关于线性表的说法不正确的是 。
A 线性表中的数据元素可以是数字、字符、记录等不同类型。
B 线性表中包含的数据元素个数不是任意的。
C 线性表中的每个结点都有且只有一个直接前趋和直接后继。
1.A/C(这题是考察对概念的理解,可参考第7题,“顺序表才能随即存取,而链表不可以”)
3.q->next=s;
7.A(此题绝对选A,因为链表只能根据他的前一个结点才能找到下一个结点,不具备随即访问元素的功能)
◍ 数据结构课件
Hashtable类存储的是对象的名-值对。将对象的名和它的值相关联同时存储,并可以根据对象名来提取它的值。在Hashtable中,一个键名只能对应着一个键值,然而一个键值可以对应多个键名,键名必须是惟一的。构造函数以及常用方法如下:
public Hashtable()
构建散列表。
public Hashtable(int initialCapacity)
构建长度为initialCapacity的散列表。
public int size()
返回散列表的名的个数。
public Object remove(Object key)
删除散列表中key名及其对应的value值。
public Object put(Object key,Object value)
将对象名key和对象值value存放到散列表中。
public Object get(Object key)
返回散列表key名对应的值。
public String toString()
转换成字符串。
例2:操作Hashtable对象,进行添加、修改、删除等操作,输出结果如图2所示。源程序代码如下:
//程序文件名为UseHashtable.java
import java.util.hashtable;
public class UseHashtable
{
public static void main(String[] args)
{
Hashtable hScore=new Hashtable();
hScore.put("张一","86");
hScore.put("李二","98");
hScore.put("海飞","99");
System.out.println("转换成字符串之后的输
出:"+hScore.toString());
hScore.put("李二 ","77");
hScore.remove("张一");
System.out.println("修改并删除之后");
System.out.println("转换成字符串之后的输出:"+hScore.toString());
}
}
◍ 数据结构课件
1、世界上公认的第一台电子计算机诞生的年代是( 20世纪40年代)
2、20GB的硬盘表示容量约为( 200亿个字节)
3、在微机中,西文字符所采用的编码是( ASCII码)
4、计算机安全是指计算机资产安全,即(计算机信息系统和信息不受自然和人为有害因素威胁和危害)
5、度量计算机运算速度常用的单位是( MIPS)
6、下列设备组中,完全属于计算机输出设备的一组是( 打印机,绘图仪,显示器)
7、计算机操作系统的主要功能是(管理计算机系统的软硬件资源,以充分发挥计算机资源的效率,并为其他软件提供良好的运行环境)
8、计算机软件的确切含义是(计算机程序、数据与相应文档的总称)
9、下列关于计算机病毒的叙述中,错误的是(感染计算机病毒的计算机具有对该病毒的免疫性)
10、在一个非零无符号二进制整数之后添加一个0,则此数的值为原数的( 2倍)
11、以下关于编译程序的说法正确的是( 编译程序完成高级语言程序到低级语言程序的等价翻译)
12、用高级程序设计语言编写的程序(具有良好的可读性和可移植性)
13、一个完整的计算机系统的组成部分的确切提法应该是(计算机硬件和软件 )
14、运算器的完整功能是进行( 算术运算和逻辑运算)
15、计算机网络最突出的优点是(资源共享和快速传输信息)
16、以太网的拓扑结构(总线型)
17、能直接与CPU交换信息的存储器是(内存储器)
18、正确的IP地址是( 202.112.111.1)
19、上网需要在计算机上安装( 浏览器软件)
20、世界上公认的第一台电子计算机诞生在( 美国 )
◍ 数据结构课件
社会保障学
一、选择题
1、社会保障体系是(B)各项制度的总和。
A.社会保险B.社会保障C.社会救助D.社会优抚
2、社会救助是(A)社会保障。
A.最低B.基本C.特殊D.最高
3、在社会救助方面,(C)年6月1日,上海市正式实施最低生活保障制度,标志着我国最低生活保障制度正式建立。
A.1986B.1997C.1993D.20074、社会保障体系是由社会保障立法、(ABCDE)、社会保障管理等制度组成。
A.社会保障基金B.社会保险C.社会救D.社会福利E.社会优抚
5、社会保险包括:(ABCDE)
A.养老保险B.医疗保险C.失业保险D.工伤保险E.生育保险
6、(A)是指对资源的有效利用,以最小的投入获得最大的产出。
A.效率B.公平C.合理D.平等
7、社会福利的原则是普遍性和(C)相结合的原则。
A.灵活性B.强制性C.选择性D.特殊性
8、社会救助的原则包括:(ABCD)
A.选择性原则B.人道主义原则C.受助权力原则D.最低生活原则E.励军荣军的原则
9、社会保险的原则是(AC)。
A.权力和义务相结合原则B.普遍性原则C.统筹互济原则D.逆向分配原则E.灵活性原则
10、按照国家规定,企业职工社会保险基金结余额除预留相当于两个月的支付费用外,应全部购买(D)和转存为银行定期存款。
A.股票B.福利彩票C.企业债券D.国债E.期货
11、社会保障基金监管的组织体制主要包括(ABC)
A.政府监管B.内部监管C.社会监管D.企业监管E.外部监管
12、养老保险水平是指退休后所能拿到()的多少。(C)
A.工资B.奖金C.养老金D.补助金E.津贴
13、养老保险的意义有(ABCD)
A.养老保险制度使老年人的养老更加有保障B.养老保险制度使社会更加安定
C.养老保险的巨额资金储蓄,一方面可以调节市场消费,另一方面支援国家经济建设
D.养老保险使得家庭养老的重要性下降E.养老保险承诺与兑现之间的时间最长
14、医疗保险是(ACE),当参保人遭遇疾病时向其提供医疗费用补偿的一种制度安排。
A.政府主导B.社会捐赠C.国家立法D.企业赞助E.依法筹资
15、医疗保险中的待遇水平主要体现在(ABC)
A.起付线B.封顶线C.报销比例D.患者自负E.财政补贴
16、失业的类型有:(ABCDE)
A.摩擦性失业B.结构性失业C.周期性失业 D.季节性失业E.技术性失业
17、就业保障制度由哪些方面构成(BCD)
A.社会互助B.失业预防C.失业保险D.失业补助E.社会福利
18.在社会保险中,保险涉及面最广.运作机制最复杂的是(A)保险。
A.医疗B.养老C.工伤D.生育E.失业
19、战后几乎把国民生产总值的2/3用在建设“福利国家”上,并以其福利项目全、保障范围广、待遇标准高的社会福利体系而被誉为“福利国家”典范的是()
A.奥地利B.瑞典C.法国D.联邦德国E.日本
20、现代社会保障体系中最重要的子系统是()
A.社会保险B.社会救助C.社会福利 D.社会互助E.养老保险
连线题 答案在P1
5是非题参考知识点
社会保障的主要责任主体是民间组织,国家或政府只是补充。(X)
社会保障的主要责任主体是国家或政府,民间组织只是补充。
商业保险受社会保险法的法律约束。(X)
商业保险受商业保险法、消费者保护法的法律约束
社会市场经济理论产生与20世纪20-30年代的英国,成熟于40-70年代,是介于自由资本主义与社会民主主义之间的一种思想流派或价值体系。(X)
社会市场经济理论产生与20世纪20-30年代的德国,成熟于40-70年代,是介于自由资本主义与社会民主主义之间的一种思想流派或价值体系。
社会保障基金是国家依据法律和政策规定,通过法定程序,以各种方式强制建立起来的用于实施各项社会保障制度、可以通融使用的货币资金。(X)
社会保障基金是国家依据法律和政策规定,通过法定程序,以各种方式强制建立起来的用于实施各项社会保障制度、专款专用的货币资金。
社会统筹与个人账户相结合是中国养老保险基金收支管理的一种新模式。其主要理念是将平等与效率相结合,把社会互济与自我保障相结合。(√)
论述题
结合实际论述社会保障的意义。答案P16
案例分析
案例一:单位不缴费我该怎么办?
张某2003年8月与单位解除劳动合同,成了一名失业者。不久,经朋友介绍到本市某单位开通勤车,但由于张某是失业者,单位不愿意为张某缴纳社会保险费,3个月后,张某被一个“协保”人员替代了。去年5月在一位热心朋友的引荐下,张某到一家私企开车,可老板还是不为张某缴社会保险费,张某感到这样下去不是办法,便把参加社会保险的事提了出来,老板要张某自己到外面找地方缴。张某今年年龄也不小了,怕丢失现在的工作,想暂时不提缴费的事了,等以后离开单位后再说,到时让他们一起“补”。可张某心里没底,这样做有问题吗?
分析提纲:
1、企业不为员工缴社保是不对的,外面也没有什么机构可挂靠代缴社保。社会保险具有强制性特征,用人单位不为职工缴纳社会保险费是一种违法行为。我国《宪法》规定:“中华人民共和国公民在年老、疾病或者丧失劳动能力的情况下,有从国家和社会获得物质帮助的权利。”《劳动法》第七十条规定:“国家发展社会保险,建立社会保险制度,设立社会保险基金,使劳动者在年老、患病、工伤、失业、生育等情况下获得帮助和补偿。”《社会保险费征缴暂行条例》第七条规定:“缴费单位必须向当地社会保险经办机构办理社会保险登记,参加社会保险”。
2、本案例可从以下四个方面进行分析:
(1).用人单位不为职工缴纳社会保险费是一种违法行为。案例中张某的老板招用了张某但未给他缴纳社会保险,违反了《劳动法》的相关条例。
(2).私企老板让张某自己解决缴纳社会保险费问题,这不仅对张某构成了侵权,同时也是一种违法的用工行为。根据劳动法律、法规规定,中国境内的所有企业、个体经济组织、民办非企业单位、企业化管理的事业单位及其职工都应依法参加社会保险。这是《劳动法》规定的用人单位应尽的法律职责,任何单位都不可规避为员工缴费的义务。
(3).本市也没有专门接受职工挂靠、帮助用人单位规避履行缴费义务的机构。
(4).劳动者与用人单位劳动关系存续期间,用人单位不履行社会保险缴费义务的,劳动者随时可以通过申请劳动争议仲裁或举报,来要求用人单位履行社会保险缴费义务,包括与用人单位终止劳动关系后。
3、因此,张某可到当地的劳动争议仲裁委员会提出诉讼,要求单位为他补缴拖欠的社会保险费用。作为普通劳动者,我们应该多学习相关的劳动保障的条例,切实维护自己的权益,避免出现像张某这样的侵权事件。同时,是要加强社会保险有关法律法规政策的宣传,提高用人单位和职工依法参加社会保险的自觉意识。另外,是劳动保障行政部门要进一步加强劳动合同鉴证工作,加强劳动合同管理,促进用人单位和职工之间签订合法有效的劳动合同,维护劳动合同双方当事人的合法权益。
案例六:辞职后医疗费无着落该怨谁
老王的儿子原在本市某酒店工作,前不久,因其身患疾病,向单位提出请病假治疗。单位的部门领导在了解了情况后,“劝” 老王的儿子写份辞职报告,单位多发一个月工资,等病好了再来上班。由于老王的儿子不懂政策,稀里糊涂地交了辞职报告。后经几家医院诊断,老王的儿子患上了一种慢性病,且今后对脑神经也会产生影响,医生说需要较长时间的治疗。老王在得知这一情况后,马上与他单位联系,希望能对患病的儿子通融、照顾一下。但单位以辞职报告不可更改为由,一口回绝。老王不知道单位的这种做法是否合法?老王该怎么办?
分析提纲:
1.我们对老王的儿子目前的处境深表同情,老王的儿子接下来看病用药将会给家庭增加一笔不小的医疗费用。
2.医疗保险是有国家立法,通过强制性社会保险原则,由国家、单位(雇主)和个人缴纳保险费进行筹资,建立医疗保险基金,当个人因病接受了医疗服务时,由社会保险机构提供医疗保险费用补偿的一种社会保险制度。医疗保险是国家法定的险种,即一旦用人单位招用了劳动者,就必须履行为其缴纳医疗保险的义务,劳动者可在接受医疗服务后获得相应的补偿。但从案例的情况来看,老王的儿子向单位递交辞职报告,是一种主动要求解除劳动合同的行为,单位一经同意,完全有理由回绝老王的儿子要求恢复劳动关系的请求。
3.职工的患病医疗期是针对劳动合同履行期间而设定的。不同的劳动合同期限,有不同的医疗期,一般来说,医疗期最多不超过24个月。案例中老王儿子的医疗期得视他的劳动合同期来确定。
4.失业人员在领取失业保险金期间患病的,根据本市相关政策也可按规定领取医疗补助金。根据本市失业保险的相关规定,失业人员在领取失业保险金期间患病,并在户籍所在地的地段医院或者由失业保险管理部门指定的医院就诊的,可申请医疗补助金,符合本市职工基本医疗保险规定的用药范围、诊疗项目、医疗服务设施和费用标准的,由失业保险给予70%的补贴。如医疗费用较大,本人及其家庭承担确有困难,可以申请适当增加。所以老王儿子在此失业的情况下,可在发生医疗费用的次月,携带《劳动手册》和医疗费单据,到街道或乡镇就业服务机构提出申请医疗补助金。
5.这次辞职经历,对老王的儿子来讲,可谓教训深刻,代价昂贵。对其他劳动者来讲,应多学习劳动保障的相关法律法规,切实维护自身的权益。
◍ 数据结构课件
数据挖掘又名数据探勘、信息挖掘。它是数据库知识筛选中非常重要的一步。数据挖掘其实指的就是在大量的数据中通过算法找到有用信息的行为。一般情况下, 数据挖掘都会和计算机科学紧密联系在一起, 通过统计集合、在线剖析、检索筛选、机器学习、参数识别等多种方法来实现最初的目标。统计算法和机器学习算法是数据挖掘算法里面应用得比较广泛的两类。统计算法依赖于概率分析, 然后进行相关性判断, 由此来执行运算。
而机器学习算法主要依靠人工智能科技, 通过大量的样本收集、学习和训练, 可以自动匹配运算所需的相关参数及模式。它综合了数学、物理学、自动化和计算机科学等多种学习理论, 虽然能够应用的领域和目标各不相同, 但是这些算法都可以被独立使用运算, 当然也可以相互帮助, 综合应用, 可以说是一种可以“因时而变”、“因事而变”的算法。在机器学习算法的领域, 人工神经网络是比较重要和常见的一种。因为它的优秀的数据处理和演练、学习的能力较强。
而且对于问题数据还可以进行精准的识别与处理分析, 所以应用的频次更多。人工神经网络依赖于多种多样的建模模型来进行工作, 由此来满足不同的数据需求。综合来看, 人工神经网络的建模, 它的精准度比较高, 综合表述能力优秀, 而且在应用的过程中, 不需要依赖专家的辅助力量, 虽然仍有缺陷, 比如在训练数据的时候耗时较多, 知识的理解能力还没有达到智能化的标准, 但是, 相对于其他方式而言, 人工神经网络的优势依旧是比较突出的。
建模的过程主要是以支持向量机定位方式作为基础, 把定位的位置栅格化, 面积较小的栅格位置就是独立的一种类别, 在定位的位置内, 我们收集数目庞大的终端测量数据, 然后利用计算机对测量报告进行分析处理, 测量栅格的距离度量和精准度, 然后对移动终端栅格进行预估判断, 最终利用机器学习进行分析求解。
本次研究, 我们采用的模型对象是我国某一个周边长达10千米的二线城市。在该城市区域内, 我们测量了四个不同时间段内的数据, 为了保证机器学习算法定位的精准性和有效性, 我们把其中的三批数据作为训练数据, 最后一组数据作为定位数据, 然后把定位数据周边十米内的前三组训练数据的相关信息进行清除。一旦确定某一待定位数据, 就要在不同的时间内进行测量, 按照测量出的数据信息的经纬度和平均值, 再进行换算, 最终, 得到真实的数据量, 提升定位的速度以及有效程度。
用机器学习算法来进行移动终端定位, 其复杂性也是比较大的, 一旦区域面积增加, 那么模型和分类也相应增加, 而且更加复杂, 所以, 利用机器学习算法来进行移动终端定位的过程, 会随着定位区域面积的增大, 而耗费更多的时间。利用基站的经纬度作为基础来进行早期的定位, 则需要以下几个步骤:要将边长为十千米的正方形分割成一千米的小栅格, 如果想要定位数据集内的相关信息, 就要选择对边长是一千米的小栅格进行计算, 而如果是想要获得边长一千米的大栅格, 就要对边长是一千米的栅格精心计算。
在完成初步定位工作后, 要确定一个边长为两千米的正方形, 由于第一级支持向量机定位的区域是四百米, 定位输出的是以一百米栅格作为中心点的经纬度数据信息, 相对于一级向量机的定位而言, 二级向量机在定位计算的时候难度是较低的`, 更加简便。后期的预算主要依赖决策函数计算和样本向量机计算。随着栅格的变小, 定位的精准度将越来越高, 而由于增加分类的问题数量是上升的, 所以, 定位的复杂度也是相对增加的。
第一步要做的就是选定需要定位的区域面积, 在二次输出之后, 确定其经纬度, 然后依赖经纬度来确定边长面积, 这些都是进行区域定位的基础性工作, 紧接着就是定位模型的训练。以K-近邻法为基础的三次定位需要的是综合训练信息数据, 对于这些信息数据, 要以大小为选择依据进行筛选和合并, 这样就能够减少计算的重复性。当然了, 选择的区域面积越大, 其定位的速度和精准性也就越低。
近年来, 随着我国科学技术的不断发展和进步, 数据挖掘技术愈加重要。根据上面的研究, 我们证明了, 在数据挖掘的过程中, 应用机器学习算法具有举足轻重的作用。作为一门多领域互相交叉的知识学科, 它能够帮助我们提升定位的精准度以及定位速度, 可以被广泛的应用于各行各业。所以, 对于机器学习算法, 相关人员要加以重视, 不断的进行改良以及改善, 切实的发挥其有利的方面, 将其广泛应用于智能定位的各个领域, 帮助我们解决关于户外移动终端的定位的问题。
[1]陈小燕, CHENXiaoyan.机器学习算法在数据挖掘中的应用[J].现代电子技术, , v.38;No.451 (20) :11-14.
[2]李运.机器学习算法在数据挖掘中的应用[D].北京邮电大学, .
[3]莫雪峰.机器学习算法在数据挖掘中的应用[J].科教文汇, 2016 (07) :175-178.
摘要:数据挖掘是指在大数据中开发出有价值信息数据的过程。计算机技术的不断进步, 通过人工的方式进行软件的开发与维护难度较大。而数据挖掘能够有效的提升软件开发的效率, 并能够在大量的数据中获得有效的数据。文章主要探究软件工程中数据挖掘技术的任务和存在的问题, 并重点论述软件开发过程中出现的问题和相关的解决措施。
在软件开发过程中, 为了能够获得更加准确的数据资源, 软件的研发人员就需要搜集和整理数据。但是在大数据时代, 人工获取数据信息的难度极大。当前, 软件工程中运用最多的就是数据挖掘技术。软件挖掘技术是传统数据挖掘技术在软件工程方向的其中一部分。但是它具有自身的特征, 体现在以下三个方面:
(1) 在软件工程中, 对有效数据的挖掘和处理;
(2) 挖掘数据算法的选择问题;
(3) 软件的开发者该如何选择数据。
在数据挖掘技术中, 软件工程数据挖掘是其中之一, 其挖掘的过程与传统数据的挖掘无异。通常包括三个阶段:第一阶段, 数据的预处理;第二阶段, 数据的挖掘;第三阶段, 对结果的评估。第一阶段的主要任务有对数据的分类、对异常数据的检测以及整理和提取复杂信息等。虽然软件工程的数据挖掘和传统的数据挖掘存在相似性, 但是也存在一定的差异, 其主要体现在以下三个方面:
软件工程数据主要包括两种, 一种是软件报告, 另外一种是软件的版本信息。当然还包括一些软件代码和注释在内的非结构化数据信息。这两种软件工程数据的算法是不同的, 但是两者之间又有一定的联系, 这也是软件工程数据挖掘复杂性的重要原因。
传统的数据挖掘结果可以通过很多种结果展示出来, 最常见的有报表和文字的方式。但是对于软件工程的数据挖掘来讲, 它最主要的职能是给软件的研发人员提供更加精准的案例, 软件漏洞的实际定位以及设计构造方面的信息, 同时也包括数据挖掘的统计结果。所以这就要求软件工程的数据挖掘需要更加先进的结果提交方式和途径。
我国传统的数据挖掘已经初步形成统一的评价标准, 而且评价体系相对成熟。但是软件工程的数据挖掘过程中, 研发人员需要更多复杂而又具体的数据信息, 所以数据的表示方法也相对多样化, 数据之间难以进行对比, 所以也就难以达成一致的评价标准和结果。不难看出, 软件工程数据挖掘的关键在于对挖掘数据的预处理和对数据结果的表示方法。
软件在研发阶段主要的任务是对软件运行程序的编写。以下是软件在编码和结果的提交过程中出现的问题和相应的解决措施。
该过程需要软件的研发人员能够对自己需要编写的代码结构与功能有充分的了解和认识。并能够依据自身掌握的信息, 在数据库中搜集到可以使用的数据信息。通常情况下, 编程需要的数据信息可以分为三个方面:
(1) 软件的研发人员能够在已经存在的代码中搜集可以重新使用的代码;
(2) 软件的研发人员可以搜寻可以重用的静态规则, 比如继承关系等。
(3) 软件的开发人员搜寻可以重用的动态规则。
包括软件的接口调用顺序等。在寻找以上信息的过程中, 通常是利用软件的帮助文档、寻求外界帮助和搜集代码的方式实现, 但是以上方式在搜集信息过程中往往会遇到较多的问题, 比如:帮助文档的准确性较低, 同时不够完整, 可利用的重用信息不多等。
在对软件代码重用过程中, 最关键的问题是软件的研发人员必须掌握需要的类或方法, 并能够通过与之有联系的代码实现代码的重用。但是这种方式哦足迹信息将会耗费工作人员大量的精力。而通过关键词在代码库中搜集可重用的软件代码, 同时按照代码的相关度对搜集到的代码进行排序, 该过程使用的原理就是可重用的代码必然模式基本类似, 最终所展现出来的搜索结果是以上下文结构的方式展现的。比如:类与类之间的联系。其实现的具体流程如下:
(1) 软件的开发人员创建同时具备例程和上下文架构的代码库;
(2) 软件的研发人员能够向代码库提供类的相关信息, 然后对反馈的结果进行评估, 创建新型的代码库。
(3) 未来的研发人员在搜集过程中能够按照评估结果的高低排序, 便于查询, 极大地缩减工作人员的任务量, 提升其工作效率。
软件工程领域内对动态规则重用的研究已经相对成熟, 通过在编译器内安装特定插件的方式检验代码是否为动态规则最适用的, 并能够将不适合的规则反馈给软件的研发人员。其操作流程为:
(1) 软件的研发人员能够规定动态规则的顺序, 主要表现在:使用某一函数是不能够调用其他的函数。
(2) 实现对相关数据的保存, 可以通过队列等简单的数据结构完成。在利用编译拓展中检测其中的顺序。
(3) 能够将错误的信息反馈给软件的研发人员。
在软件工程的数据挖掘过程中, 数据挖掘的概念才逐步被定义, 但是所需要挖掘的数据是已经存在的。数据挖掘技术在软件工程中的运用能够降低研发人员的工作量, 同时软件工程与数据挖掘的结合是计算机技术必然的发展方向。从数据挖掘的过程来讲, 在其整个实施过程和周期中都包括软件工程。而对数据挖掘的技术手段来讲, 它在软件工程中的运用更加普遍。在对数据挖掘技术的研究过程中可以发现, 该技术虽然已经获得一定的效果, 但是还有更多未被挖掘的空间, 还需要进一步的研究和发现。
[1]王艺蓉.试析面向软件工程数据挖掘的开发测试技术[J].电子技术与软件工程, (18) :64.
[2]吴彦博.软件工程中数据挖掘技术的运用探索[J].数字通信世界, 2017 (09) :187.
[3]周雨辰.数据挖掘技术在软件工程中的应用研究[J].电脑迷, 2017 (08) :27-28.
[4]刘桂林.分析软件工程中数据挖掘技术的应用方式[J].中国新通信, 2017, 19 (13) :119.
◍ 数据结构课件
StringBuffer类提供了一个字符串的可变序列,类似于String类,但它对存储的字符序列可以任意修改,使用起来比较String类灵活的多。它常用的构造函数为:
StringBuffer()
构造一个空StringBuffer对象,初始容量为16个字符。
StringBuffer(String str)
构造一个StringBuffer对象,初始内容为字符串str的拷贝。
对于StringBuffer类,除了String类中常用的像长度、字符串截取、字符串检索的方法可以使用之外,还有两个较为方便的方法系列,即append方法系列和方法系列。
(1)append方法系列根据参数的数据类型在StringBuffer对象的末尾直接进行数据添加。
public StringBuffer append(boolean b)
public StringBuffer append(char c)
public StringBuffer append(char[] str)
public Stringbuffer append(char[] str,int offset,int len)
public StringBuffer append(double d)
public StringBuffer append(float f)
public StringBuffer append(int i)
public StringBuffer append(long l)
public StringBuffer append(Object obj)
public StringBuffer append(String str)
public StringBuffer append(StringBuffer sb)
(2)方法系列根据参数的数据类型在StringBuffer的offset位置进行数据插入。
public StringBuffer (int offset,boolean b)
public StringBuffer (int offset,char c)
public StringBuffer (int offset,char[] str)
public StringBuffer (int index,char[] str,int offset,int len)
public StringBuffer (int offset,double d)
public StringBuffer (int offset,float f)
public StringBuffer (int offset,int i)
public StringBuffer (int offset,long l)
public StringBuffer (int offset,Object odj)
public StringBuffer (int offset,String str)
(3)下面这个方法用于将stringbuffer对象的数据转换成字符串:
public String toString()
例6:基于例5进行修改,使用StringBuffer对象得到如图6所示的输出界面。
//程序文件名为TestString.java
public class TestString
{
public static void main(String[] args)
{
StringBuffer str=new StringBuffer(" The substring begins at the specified beginIndex.");
StringBuffer str1=new StringBuffer("string");
String str2=new String();
int size=str.length();
int flag=str.indexOf("substring");
str2=str.substring(flag,flag+9);
StringBuffer strOut=new StringBuffer("字符串");
strOut.append(str);
strOut.append("总长度为:");
strOut.append(size);
int f=strOut.indexOf("总");
strOut.(f,' ');
System.out.println(strOut.toString());
if(str1.toString().equals(str2))
System.out.println("截取的字符串为:"+str1.toString());
else
System.out.println("截取的字符串为:"+str2):
}
}
◍ 数据结构课件
数据结构实验报告1
一、实验目的及要求
1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们。
本实验训练的要点是“栈”和“队列”的观点;
二、实验内容
1) 利用栈,实现数制转换。
2) 利用栈,实现任一个表达式中的语法检查(选做)。
3) 编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列);
三、实验流程、操作步骤或核心代码、算法片段
顺序栈:
Status InitStack(SqStack &S)
{
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base)
return ERROR;
=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestoryStack(SqStack &S)
{
free(S.base);
return OK;
}
Status ClearStack(SqStack &S)
{
=S.base;
return OK;
}
Status StackEmpty(SqStack S)
{
if(S.base==)
return OK;
return ERROR;
}
int StackLength(SqStack S)
{
return -S.base;
}
Status GetTop(SqStack S,ElemType &e)
{
if(-S.base>=S.stacksize)
{
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!S.base) return ERROR;
=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*++=e;
return OK;
}
Status Push(SqStack &S,ElemType e)
{
if(-S.base>=S.stacksize)
{
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!S.base)
return ERROR;
=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*++=e;
return OK;
}
Status Pop(SqStack &S,ElemType &e)
{
if(==S.base)
return ERROR;
e=*–;
return OK;
}
Status StackTraverse(SqStack S)
{
ElemType *p;
p=(ElemType *)malloc(sizeof(ElemType));
if(!p) return ERROR;
p=;
while(p!=S.base)//上面一个…
{
p–;
printf("%d ",*p);
}
return OK;
}
Status Compare(SqStack &S)
{
int flag,TURE=OK,FALSE=ERROR;
ElemType e,x;
InitStack(S);
flag=OK;
printf("请输入要进栈或出栈的元素:");
while((x= getchar)!='#'&&flag)
{
switch (x)
{
case '(':
case '[':
case '{':
if(Push(S,x)==OK)
printf("括号匹配成功!nn");
break;
case ')':
if(Pop(S,e)==ERROR || e!='(')
{
printf("没有满足条件n");
flag=FALSE;
}
break;
case ']':
if ( Pop(S,e)==ERROR || e!='[')
flag=FALSE;
break;
case '}':
if ( Pop(S,e)==ERROR || e!='{')
flag=FALSE;
break;
}
}
if (flag && x=='#' && StackEmpty(S))
return OK;
else
return ERROR;
}
链队列:
Status InitQueue(LinkQueue &Q)
{
Q.front =Q.rear=
(QueuePtr)malloc(sizeof(QNode));
if (!Q.front) return ERROR;
Q.front->next = NULL;
return OK;
}
Status DestoryQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return OK;
}
Status QueueEmpty(LinkQueue &Q)
{
if(Q.front->next==NULL)
return OK;
return ERROR;
}
Status QueueLength(LinkQueue Q)
{
int i=0;
QueuePtr p,q;
p=Q.front;
while(p->next)
{
i++;
p=Q.front;
q=p->next;
p=q;
}
return i;
}
Status GetHead(LinkQueue Q,ElemType &e)
{
QueuePtr p;
p=Q.front->next;
if(!p)
return ERROR;
e=p->data;
return e;
}
Status ClearQueue(LinkQueue &Q)
{
QueuePtr p;
while(Q.front->next )
{
p=Q.front->next;
free(Q.front);
Q.front=p;
}
Q.front->next=NULL;
Q.rear->next=NULL;
return OK;
}
Status EnQueue(LinkQueue &Q,ElemType e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof (QNode));
if(!p)
return ERROR;
p->data=e;
p->next=NULL;
Q.rear->next = p;
Q.rear=p; //p->next 为空
return OK;
}
Status DeQueue(LinkQueue &Q,ElemType &e)
{
QueuePtr p;
if (Q.front == Q.rear)
return ERROR;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front; //只有一个元素时(不存在指向尾指针)
free (p);
return OK;
}
Status QueueTraverse(LinkQueue Q)
{
QueuePtr p,q;
if( QueueEmpty(Q)==OK)
{
printf("这是一个空队列!n");
return ERROR;
}
p=Q.front->next;
while(p)
{
q=p;
printf("%d<-n",q->data);
q=p->next;
p=q;
}
return OK;
}
循环队列:
Status InitQueue(SqQueue &Q)
{
Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
if(!Q.base)
exit(OWERFLOW);
Q.front=Q.rear=0;
return OK;
}
Status EnQueue(SqQueue &Q,QElemType e)
{
if((Q.rear+1)%MAXQSIZE==Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue &Q,QElemType &e)
{
if(Q.front==Q.rear)
return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
int QueueLength(SqQueue Q)
{
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
Status DestoryQueue(SqQueue &Q)
{
free(Q.base);
return OK;
}
Status QueueEmpty(SqQueue Q) //判空
{
if(Q.front ==Q.rear)
return OK;
return ERROR;
}
Status QueueTraverse(SqQueue Q)
{
if(Q.front==Q.rear)
printf("这是一个空队列!");
while(Q.front%MAXQSIZE!=Q.rear)
{
printf("%d<- ",Q.base[Q.front]);
Q.front++;
}
return OK;
}
数据结构实验报告2
一.实验内容:
实现哈夫曼编码的生成算法。
二.实验目的:
1、使学生熟练掌握哈夫曼树的生成算法。
2、熟练掌握哈夫曼编码的方法。
三.问题描述:
已知n个字符在原文中出现的频率,求它们的哈夫曼编码。
1、读入n个字符,以及字符的权值,试建立一棵Huffman树。
2、根据生成的Huffman树,求每个字符的Huffman编码。并对给定的待编码字符序列进行编码,并输出。
四.问题的实现
(1)郝夫曼树的存储表示
typedef struct{
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree; //动态分配数组存储郝夫曼树
郝夫曼编码的存储表示
typedef char* *HuffmanCode;//动态分配数组存储郝夫曼编码
(2)主要的实现思路:
a.首先定义郝夫曼树的存储形式,这里使用了数组
b.用select遍历n个字符,找出权值最小的两个
c.构造郝夫曼树HT,并求出n个字符的郝夫曼编码HC
总结
1.基本上没有什么太大的问题,在调用select这个函数时,想把权值最小的两个结点的序号带回HuffmanCoding,所以把那2个序号设置成了引用。
2.在编程过程中,在什么时候分配内存,什么时候初始化花的时间比较长
3.最后基本上实现后,发现结果仍然存在问题,经过分步调试,发现了特别低级的输入错误。把HT[i].weight=HT[s1].weight+HT[s2].weight;中的s2写成了i
附:
//动态分配数组存储郝夫曼树
typedef struct{
int weight; //字符的权值
int parent,lchild,rchild;
}HTNode,*HuffmanTree;
//动态分配数组存储郝夫曼编码
typedef char* *HuffmanCode;
//选择n个(这里是k=n)节点中权值最小的两个结点
void Select(HuffmanTree &HT,int k,int &s1,int &s2)
{ int i;
i=1;
while(i<=k && HT[i].parent!=0)i++;
//下面选出权值最小的结点,用s1指向其序号
s1=i;
for(i=1;i<=k;i++)
{
if(HT[i].parent==0&&HT[i].weight
}
//下面选出权值次小的结点,用s2指向其序号
for(i=1;i<=k;i++)
{
if(HT[i].parent==0&&i!=s1)break;
}
s2=i;
for(i=1;i<=k;i++)
{
if(HT[i].parent==0&&i!=s1&&HT[i].weight
}
}
//构造Huffman树,求出n个字符的编码
void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n)
{
int m,c,f,s1,s2,i,start;
char *cd;
if(n<=1)return;
m=2*n-1; //n个叶子n-1个结点
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); //0号单元未用,预分配m+1个单元
HuffmanTree p=HT+1;
w++; //w的号单元也没有值,所以从号单元开始
for(i=1;i<=n;i++,p++,w++)
{
p->weight=*w;
p->parent=p->rchild=p->lchild=0;
}
for(;i<=m;++i,++p)
{
p->weight=p->parent=p->rchild=p->lchild=0;
}
for(i=n+1;i<=m;i++)
{
Select(HT,i-1,s1,s2); //选出当前权值最小的
HT[s1].parent=i;
HT[s2].parent=i;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
//从叶子到根逆向求每个字符的郝夫曼编码
HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); //分配n个字符编码的头指针变量
cd=(char*)malloc(n*sizeof(char)); //分配求编码的工作空间
cd[n-1]='';//编码结束符
for(i=1;i<=n;i++) //逐个字符求郝夫曼编码
{
start=n-1; //编码结束符位置
for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) //从叶子到根逆向求编码
{
if(HT[f].lchild==c)cd[–start]='0';
else
cd[–start]='1';
}
HC[i]=(char*)malloc((n-start)*sizeof(char)); //为第i个字符编码分配空间
strcpy(HC[i],&cd[start]);//从cd复制编码到HC
}
free(cd); //释放工作空间
}
void main
{ int n,i;
int* w; //记录权值
char* ch; //记录字符
HuffmanTree HT;
HuffmanCode HC;
cout<<"请输入待编码的字符个数n=";
cin>>n;
w=(int*)malloc((n+1)*sizeof(int)); //记录权值,号单元未用
ch=(char*)malloc((n+1)*sizeof(char));//记录字符,号单元未用
cout<<"依次输入待编码的字符data及其权值weight"<
for(i=1;i<=n;i++)
{
cout<<"data["<
}
◍ 数据结构课件
数据结构报告
引言:
数据结构是计算机科学中重要的一门课程,它研究的是如何高效地组织和管理数据。在计算机科学领域中,数据结构是构建算法的基础。本报告旨在介绍数据结构的基本概念、常用算法和应用场景,旨在帮助读者理解数据结构的重要性并学习如何在实际问题中应用。
一、数据结构的基本概念
1.1 数据结构的定义
数据结构是指逻辑结构和存储结构在计算机中的表示方式,它关注的是数据元素之间的关系和如何以及在何处存储数据。逻辑结构包含线性结构、非线性结构等;存储结构包含顺序存储、链式存储等。
1.2 基本数据结构
常用的基本数据结构包括数组(Array)、链表(Linked List)、栈(Stack)、队列(Queue)和树(Tree)等。它们分别有不同的特点与适用场景。
1.3 算法和复杂度分析
数据结构与算法密切相关,算法是解决特定问题的方法,而数据结构则是存储数据的一种方式。在实现算法时,了解算法的时间复杂度和空间复杂度等指标是非常重要的。
二、常用的数据结构及其应用
2.1 数组(Array)
数组是一种能够存储多个元素的数据结构。它具有随机访问的特点,可以通过下标快速访问任意位置的元素。数组常用于存储有序的数据,例如存储学生成绩、存储图像数据等场景。
2.2 链表(Linked List)
链表是一种动态数据结构,它是由一系列节点组成的数据结构。每个节点包含一个数据元素和一个指向下一个节点的指针。链表常用于需要频繁插入和删除元素的场景,例如实现队列或者栈等。
2.3 栈(Stack)和队列(Queue)
栈和队列是两种基本的数据结构。栈是一种后进先出(LIFO)的有序集合,只能在栈顶进行插入或删除操作。栈常用于浏览器的“后退”功能、编辑器的“撤销”功能等场景。队列是一种先进先出(FIFO)的有序集合,只能在队尾进行插入,在队首进行删除。队列常用于实现任务调度、模拟银行服务等场景。
2.4 树(Tree)
树是一种非线性的数据结构,它由节点和边组成。每个节点可以有多个子节点,而每个子节点只有一个父节点。树的应用场景广泛,例如文件系统、数据库索引等。
三、常见问题及解决方案
在实际应用中,经常会遇到一些与数据结构相关的问题。比如,在处理大规模数据时,如何选择合适的数据结构进行存储和检索;在计算路径时,如何选择合适的图算法等。本节将介绍一些常见问题的解决方案。
四、数据结构的实际应用举例
4.1 图(Graph)算法在社交网络中的应用
社交网络中的好友推荐、信息传播路径分析等任务都可以通过图算法进行建模和解决。
4.2 哈希表(Hash Table)在数据库中的应用
哈希表是一种高效的查找数据的数据结构,它可以快速地将一个关键字映射到一个索引位置。数据库中的索引就是使用哈希表来实现的。
4.3 树(Tree)在文件系统中的应用
文件系统通过树的结构来组织和管理文件目录,这样可以方便地对文件进行查找和操作。
结论:
数据结构作为计算机科学中的重要课程,为我们解决实际问题提供了基础和支持。本报告旨在介绍数据结构的基本概念、常用算法和应用场景。希望读者通过本报告的阅读,对数据结构有一个更深入的理解,并能够将其应用到实际的问题中去。最后,数据结构不仅是计算机科学领域的基础,更是我们探索和应用计算机技术的桥梁。
◍ 数据结构课件
实验报告;课程名称:数据结构班级:软件工程实验成绩:;1206;实验名称:打印机队列模拟学号:4848批;程序的设计;实验编号:实验一姓名:实验日期:5月2;一、实验目的;对队列的理解;对STL中的queue的使用;实验仿真一个网络打印过程;二、实验内容与实验步骤流程图;这个任务队列的测试使用STL队列适配器;具体地说,每一行中包含的信息是
这个任务队列的测试使用STL队列适配器。程序要求完成模拟的实现共享打印机。这个打印机使用先进先出队列。仿真是通过读取和处理事件数据文件的列表。一个有效的数据文件中的每一行包含信息打印作业和提交这份工作的时间。
具体地说,每一行中包含的信息是提交工作的时间(以秒为单位),和在页面的工作长及工作的计算机的名称。在模拟的开始,每个这些事件的每一个应该被程序所读,存储在继承工作负载队列。程序应该通过循环递增计数器或while-loop模拟时间的流逝。程序应该将计数器初始化为零,然后依次增加1秒。当模拟等于当前时间的打印作业的提交时间在工作队列的前面,一个打印作业完成。当这一切发生的时候,从工作队列取出这个事件,然后把它放在另一个队列对象。这个队列对象存储已完成的打印作业。当程序仿真其他的打印工作的时候,这些工作在队列等待。
#include “simulator.h”
protected:
queue waiting;
priority_queue priority_waiting;
public:
fifo(int seconds_per_page);
void simulate(string file);
};
bool operator < (event evtleft,event evtright);
using namespace std;
fifo::fifo(int seconds_per_page):simulator(seconds_per_page){ }
void fifo::simulate(string file){
int finish_time = 0;
float agg_latency = 0;
int totaljob =0;
event evt;
if(file.find(“arbitrary”)!= string::npos){
string outfile =“arbitrary.out”;
ofstream osf(outfile.c_str());
loadworkload(file);
osf<
for(int time =1;!waiting.empty()||!workload.empty();time++){ while(!workload.empty() && time ==
workload.front().arrival_time()){
evt= workload.front();
osf<
workload.pop();
}
if(!waiting.empty() && time >= finish_time){
totaljob ++;
evt = waiting.front();
agg_latency += time - evt.arrival_time();
osf<
finish_time = time + evt.getjob().getnumpages() * seconds_per_page;
}
}
osf<
osf<
osf<
return;
}
if(file.find(“bigfirst”) != string::npos){
string outfile = “bigfirst.out”;
ofstream osf(outfile.c_str());
loadworkload(file);
=1;!priority_waiting.empty()||!workload.empty();time++){
while(!workload.empty() && time ==
workload.front().arrival_time()){
evt= workload.front();
osf<
workload.pop();
}
if(!priority_waiting.empty() && time >= finish_time){
totaljob ++;
evt = priority_();
agg_latency += time - evt.arrival_time();
osf<
finish_time = time + evt.getjob().getnumpages() * seconds_per_page; }
}
osf<
osf<
osf<
return;
}
cerr<
cerr<
bool operator < (event evtleft,event evtright){
return evtleft.getjob().getnumpages() <
evtright.getjob().getnumpages();
经测试,功能较为完整。代码流程简图如下:
通过这次实验,我了解了有关队列方面的知识。掌握了队列的逻辑结构,抽象数据类型,队列的存储方式等。运用先进先出表,仿真了网络打印队列。这都使我对数据结构的学习有了新的认识与帮助。在实验过程中,我也遇到了许多困难,从开始时对队列运算的不熟悉,到逐渐查找资料,从而完成了实验;六、附录;-《数据结构与算法分析》以及网上资料;
逐渐查找资料,从而完成了实验。在今后的学习中,我将继续努力,加强对堆栈,队列等知识的学习,以达到精益求精。
◍ 数据结构课件
21、在计算机中,组成一个字节的二进制位位数是( 8 )。
22、下列关于ASCII编码的叙述中,正确的是( 所有大写英文字母的ASCII码值都大于小写英文字母‘a’的ASCⅡ码值)
23、下列选项属于“计算机安全设置”的是( 停掉Guest账号 )。
24、CPU主要技术性能指标有( 字长、主频和运算速度 )。
25、下列设备组中,完全属于输入设备的一组是( 绘图仪,键盘,鼠标器 )
26、计算机系统软件中,最基本、最核心的软件是( 操作系统 )。
27、下列软件中,属于系统软件的是( Windows Vista )。
28、下列关于计算机病毒的叙述中,正确的是( 反病毒软件必须随着新病毒的出现而升级,提高查、杀病毒的功能 )。
29、如果删除一个非零无符号二进制偶整数后的2个O,则此数的值为原数( 1/4 )
30、高级程序设计语言的特点是( 高级语言数据结构丰富 )。
31、计算机硬件能直接识别、执行的语言是( 机器语言 )
32、计算机的系统总线是计算机各部件间传递信息的公共通道,它分(数据总线、控制总线和地址总线)。
33、微机硬件系统中最核心的部件是( CPU )
34、用“综合业务数字网”(又称“一线通”)接人因特网的优点是上网通话两不误,它的英文缩写是(ISDN)
35、当电源关闭后,下列关于存储器的说法中,正确的是(存储在ROM中的数据不会丢失 )
36、计算机指令由两部分组成,它们是(操作码和操作数)
37、有一域名为bit. edu. cn,根据域名代码的规定,此域名表示(教育机构)。
38、能保存网页地址的文件夹是( 收藏夹 )
39、按电子计算机传统的分代方法,第一代至第四代计算机依次是(电子管计算机,晶体管计算机、小、中规模集成电路计算机,大规模和超大规模集成电路计算机)
40、假设某台式计算机的内存储器容量为256MB,硬盘容量为40GB,硬盘的容量是内在容量的(160倍)
◍ 数据结构课件
摘要:人类利用图书馆产生信息活动时所表现出的最基础、最平常、最通用的一种关系,便是用户资源和图书馆之间的关系。从这种关系出发,分析嫁接起这一简单联系的规律,便是数据挖掘技术。本文认为对图书馆用户资源分析研究应以数据挖掘技术为逻辑起点,从云计算、信息共享、数据排查、智能搜索、大数据存储等对图书馆用户资源进行整合和建设。应对信息资源日益丰富的这天,数据挖掘技术对管理图书馆信息资源技术带给了巨大便利。
数据挖掘,即数据系统中的信息发现。随着计算机技术,个性是云计算、大数据记忆技术的快速发展,传统的手动查找信息模式被大数据智能检索替代。数据挖掘技术广泛应用于市场、工业、金融行业、科学界、互联网行业以及医疗业。数据挖掘技术在图书馆的应用,能够将海量的用户资源进行聚类、关联、整合,能够对用户搜索记录、图书流通记录、用户借阅信息等数据进行精确预判,发现一些隐蔽的联系,为图书馆采购图书、淘汰文献资料带给科学推荐,也能够为用户带给个性化订阅服务,创新用户服务模式,为图书馆建设整个信息网络带给有力支撑。
图书馆用户资源是透过数字技术进行组织和管理的:(1)经过数据关联分析,把数据库中存在的两个或两个以上用户之间的相同性提取出来,提高支持度和说服力;(2)把用户信息按照相似性归纳成几个类别,建立宏观概念,发现其间的相互关系;其次定义这些相互关系,概念产生以后,即等同于这些相互关系的整体信息,用于建构分类规则或者数据模型;其次利用以上数据找出变化规律,对此规律进行模型化处理,并由数据模型对未知信息进行预判;(3)把用户资源进行时序排序,检索出高重复率的模型;(4)进行偏差比对,检查数据之中的异常状况。图书馆利用超多的用户访问信息获取用户兴趣,发现用户群体,为不同的群体定制信息,还能够建立一个共享信息平台,让不同用户建立网络交流。
大数据形势下,图书馆能够获取的用户资源不仅仅限于用户个人信息和搜索记录,也包括档案、学术研究、教学模式、用户评价和反馈等,数据丰富。同时,数据分布广泛,在互联网时代,可从图书馆应用系统、数据系统记录以及各种网页、移动终端的信息获取,显示出用户资源的分散性。
数据系统里的存储方式不同,服务器不同,系统开发平台不同,致使许多用户资源无法交流互换。图书馆用户资源有半模型化、模型化和非模型化之分。传统的图书馆用户资源中,用户只是图书资源的使用者,与图书馆之间只是点对点单线互动,用户之间不存在交流,而在大数据网络平台下,用户之间能够建立资料共享互动平台,使得用户资源的资料更加多元化。
用户资源图书馆具备信息量大的特点,用户可获得各方各面的信息,且从服务的个性化和全方位化而言,图书馆可根据社会热点或用户需求定制服务。一方面,建立用户资源图书馆,使各类用户信息在同一界面统一呈现,方便用户的选取和检索。另一方面,利用数据挖掘技术建立的用户资源图书馆,服务器众多,具有较强的计算潜力和存储潜力,拥有较高的数据处理潜力,能同时容纳多数用户。因数据量大所导致的硬件费用和后期运行费用剧增,可透过构建用户资源图书馆平台以及应用服务得到解决。为应付不断提高的用户资源存储方面的压为,目前亟需的就是投入超多资金以扩容存储设备,无疑,建立用户资源平台能够解决此问题。
强大的互联网呈现功能和用户信息保存的可靠性功能,用户资源存储的复杂性问题可得到很好的解决。其次,数据挖掘技术对于资源整合方面具有优势,透过分布式的存储模式整合超多信息资源带给给用户检索。不同的数据之间的互相操作以及全方位的互联网服务得以实现,很好的解决了资源重复建设的问题。因此,利用数据挖掘使得图书馆资源数字化具备可行性。从这个好处上来看,资源的馆藏数字化将会加快发展,而不只是图书书目的剧增。
随着各类用户资源利用步伐的加快,加之依靠因特网的用户对服务的可行性和效率性要求更高,超多不同体系的服务器布置在机房,系统维护人员的压力也相应増大。透过数据挖掘技术,可有效进行资源整合和优化,无需透过人力进行。
数据挖掘技术能够利用用户资源计算出用户模型,这是研究用户需求、偏好、行为的一种常规方式,一般认为用户模型是对用户在某段时间内相对稳定的信息需求的记录。用户模型反过来对获取用户资源有十分重要的作用,建构用户模型,能够使图书馆更加精深、准确地掌握当前用户资源。透过对用户资源的处理来预测用户需求,进而到达持续提高服务质量和用户满意度的目的。一方面,预判用户心理是利用图书馆用户资源更加深入的表现。随着用户环境与图书馆环境的不断变化,这种预判力覆盖范围已经不单单是用户信息行为的某个过程或某几个过程,相反,用户心理能够对用户需求的强弱、层次、方向产生极为重要的影响,同时也能够对获取用户资源全部过程产生重要影响。另一方面,最先研究用户体验研究当属企业营销活动,主要用来研究用户与企业、产品或服务之间的互动。数据挖掘技术能够更精准预测用户的实际感受,透过研究用户情感体验与用户行为动作,提高用户的满意度,满足用户需求。
在数据大爆发时代,重视图书馆用户资源,透过多渠道、多方式汇聚用户资源,采用数据挖掘、数据归档分析等技术,掌握用户资源特征,有助于图书馆精准定位用户群体,对调整图书馆运营策略有重要前置作用,更能创新图书馆服务的资料和形式,实现图书馆资源的有效利用。
[2]郭崇慧等.北京数据挖掘教程[M].北京:清华大学出版社,.
[3]徐永丽等.网络环境中用户信息需求障碍分析[J].图书馆理论与实践,.
◍ 数据结构课件
问题描述:;四则运算表达式求值,将四则运算表达式用中缀表达式;一、需求分析:;输入输出格式:;输入格式:在字符界面上输入一个中缀表达式,回车表;请输入表达式:;输入一个中缀表达式;输出格式:如果该中缀表达式正确,那么在字符界面上;式,其中后缀表达式中两相邻操作数之间利用空格隔开;果不正确,在字符界面上输出
问题描述:
四则运算表达式求值,将四则运算表达式用中缀表达式,然后转换为后缀表达式,并计算结果。
一、 需求分析:
1、本程序是利用二叉树后序遍历来实现表达式的转换,同时可以使用实验三的结果来求解后缀表达式的值。
2、输入输出格式:
输入格式:在字符界面上输入一个中缀表达式,回车表示结束。
请输入表达式:
输入一个中缀表达式
输出格式:如果该中缀表达式正确,那么在字符界面上输出其后缀表达
式,其中后缀表达式中两相邻操作数之间利用空格隔开;如
果不正确,在字符界面上输出表达式错误提示。
逆波兰表达式为:
3、测试用例
输入:21+23*(12-6)
输出:21 23 12 6 -*+ 输出逆波兰表达式 运算结果为:输出运算后的结果
二、概要设计 :
抽象数据类型
二叉树类BiTree
算法的基本思想
根据题目要求,利用栈计算,和二叉树存储,来计算表达式
该算法的基本思想是:
先利用栈进行计算,然后用二叉树进行存储,和实验三算法一样来计算逆波兰表达式的值
程序的流程
程序由三个模块组成:
(1) 输入模块:输入一个运算式
(2) 计算模块:利用栈进行表达式的计算,二叉树来存储。 (3 ) 输出模块:屏幕上显示出后缀表达式和运算结果。
三、详细设计
物理数据类型
程序含有两个类,其中栈不再赘述,另一个类为二叉树class BiTree包含私有成员struct BiTreeNode,根节点BiTreeNode *T;索引index; int number_of_point 优先级比较函数 compare(char a,char b);生成树的函数void InorderCreate(BiTreeNode *&T,char str[30][10],int start,int end);判断数字函数bool IsNumber(char a);求值函数double Operate(BiTreeNode *T);还有显示后缀表达式的函数void display(BiTreeNode *T) ;而公有成员函数则是对私有函数的重载,为方便使用,因为函数中普遍使用了递归的算法。
算法的时空分析
此算法利用栈和二叉树来实现,故次算法的的时间复杂度为(N)。
输入和输出的格式
输入格式:请输入表达式:
输入一个中缀表达式 //回车
输出格式:逆波兰表达式为:
输出逆波兰表达式
运算结果为:输出运算后的结果
四、调试分析
略。
五、测试结果
本实验的测试结果截图如下:
六、用户使用说明(可选)
运行程序时
提示输入表达式
本程序可以将中缀表达式转换为后缀表达式后在计算出运算式的结果。 提示:请输入表达式:
输出
提示:逆波兰表达式为:
运算结果:
七、实验心得(可选)
本次实验过程比较复杂,由于书上的`知识掌握的还不是很牢靠,所以现在实验做起来有点儿吃力。本实验主要是通过与同学的讨论和课后查阅资料来完成的,虽然有些地方还不是很懂,但基本上能完成此次实验的内容。而且通过本次实验,加深了对二叉树算法的了解。
附录(实验代码):
#include
#include
#include
#include
#include
#include
#define STACK_INIT_SIZE 100
#define DATA_SIZE 10
#define STACKINCREMENT 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
using namespace std;
typedef float SElemtype;
typedef int Status;
typedef char * TElemType;
typedef struct BiTNode {
TElemType data;
int len; //data字符串中字符的个数
struct BiTNode * lchild, * rchild;
}BiTNode, *BiTree;
typedef struct
{
SElemtype *base;
SElemtype *top;
int stacksize;
} SqStack;
Status IsDigital(char ch)
{ if(ch>='0'&&ch<='9')
{return 1; //是数字字母
}
return 0; //不是数字字母
}
int CrtNode(stack &PTR, char *c)
{
BiTNode * T;
int i=0;
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = (char *)malloc(DATA_SIZE*sizeof(char));
while(IsDigital(c[i]))
{T->data [i] = c[i];
i++; }
T->len = i;
T->lchild = T->rchild = NULL;
PTR.push (T);
return i;
}
void CrtSubTree(stack &PTR, char c)
{BiTNode * T;
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = (char *)malloc(DATA_SIZE*sizeof(char));
T->data [0] = c;
T->len = 1;
T->rchild = (); //先右子树,否则运算次序反了
PTR.pop ();
T->lchild = ();
PTR.pop ();
PTR.push (T);
}
char symbol[5][5]={{'>', '>', '<', '<', '>'}, //符号优先级
{'>', '>', '<', '<', '>'},
{'>', '>', '>', '>', '>'},
{'>', '>', '>', '>', '>'},
{'<', '<', '<', '<', '='}};
int sym2num(char s) //返回符号对应优先级矩阵位置 { switch(s)
{
case '+': return 0; break;
case '-': return 1; break;
case '*': return 2; break;
case '/': return 3; break;
case '#': return 4; break;
}
}
char Precede(char a, char b) //返回符号优先级
{return(symbol[sym2num(a)][sym2num(b)]);}
void CrtExptree(BiTree &T, char exp[])
{ //根据字符串exp的内容构建表达式树T
stack PTR;//存放表达式树中的节点指针
stack OPTR;//存放操作符
char op;
int i=0;
OPTR.push ('#');
op = ();
while( !((exp[i]=='#') && (()=='#')) ) //与
{
if (IsDigital(exp[i]))
{//建立叶子节点并入栈 PTR
i+=CrtNode(PTR, &exp[i]);
}
else if (exp[i] == ' ')
i++;
else{
switch (exp[i])
{
case '(': {
OPTR.push (exp[i]);
i++;
break;}
case ')': {
op = (); OPTR.pop ();
while(op!='('){
CrtSubTree(PTR, op);
op = (); OPTR.pop ();
◍ 数据结构课件
一、选择题(每小题2分,共30分)1.数据结构是(D)。
A.一种数据类型 B.数据的存储结构 C.一组性质相同的数据元素的集合
D.相互之间存在一种或多种特定关系的数据元素的集合
2.以下与数据的存储结构无关的术语是(D)。
A.链队列 B.链表 C.顺序表 D.栈
3.以下数据结构中,(A)是非线性数据结构
A.树 B.字符串 C.队 D.栈
4.一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是(B)。
A.98 B.100 C.102 D.106
5.在线性表的下列运算中,不改变数据元素之间结构关系的运算是(D)。A.插入 B.删除 C.排序 D.查找
6.线性表采用链式存储时,其地址(D)。
A.必须是连续的 B.一定是不连续的 C.部分地址必须连续 D.连续与否均可以
7.线性表是(A)。
A.一个有限序列,可以为空 B.一个有限序列,不可以为空 C.一个无限序列,可以为空 D.一个无限序列,不可以为空
8.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为(B)。
A.3,2,6,1,4,5 B.3,4,2,1,6,5 C.1,2,5,3,4,6 D.5,6,4,2,3,1
9.若一个栈的输人序列是1,2,3,…,n,输出序列的第一个元素是n,则第k个输出元素是(C)。
A.k B.n-k-1 C.n-k+1 D.不确定
10.对于队列操作数据的原则是(A)。
A.先进先出 B.后进先出 C.先进后出 D.不分顺序 11.栈和队列的共同点是(C)。
A.都是先进先出 B.都是先进后出 C.只允许在端点处插入和删除元素 D.没有共同点
12.在一个链队列中,假定front和rear分别为头指针和尾指针,删除一个结点的操作是(A)。
A.front=front->next B.rear=rear->next C.rear->next=front D.front->next=rear
13.空串与空格串(B)。
A.相同 B.不相同 C.可能相同 D.无法确定
14.串与普通的线性表相比较,它的特殊性体现在(C)。A.顺序的存储结构 B.链接的存储结构 C.数据元素是一个字符 D.数据元素可以任意
15.串的长度是指(B)。
A.串中所含不同字母的个数 B.串中所含字符的个数
C.串中所含不同字符的个数 D.串中所含非空格字符的个数
二、填空题(每空2分,共20分)
1. 线性表、栈和队列,串都是__线性_____结构。2. 数据的基本单位是__数据元素_______________。
3. 当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用_顺序______存储结构。4. 已知具有n个元素的一维数组采用顺序存储结构,每个元素占k个存储单元,第一个元素的地址为Loc(a1),那么,第i个元素的存储地址Loc(ai)= Loc(a1)+(i-1)*k。5. 栈(stack)是限定在表尾进行插人或删除操作的线性表。在栈中,允许插人和删除操作的一端称为__栈顶________,而另一端称为_栈底________。6. 一个循环队列Q中,头指针和尾指针分别为Q.front和Q.rear,且最大队列长度为MaxQSize,则判断队空的条件为 Q.rear==Q.front,判断队满的条件为(Q.rear+1)%MaxQSize==Q.front。队列的长度为(.rear-Q.front+MaxQSize)%MaxQSize
7. 两个串相等的充分必要条件是 两个串的长度相等,且各个对应位置的字符都相等。
三、程序填空题(每空3分,共30分)
1.在带头结点的单链表L中第i个数据元素之前插入数据元素e的C语言描述算法如下,其中L为链表头结点指针。请填充算法中标出的空白处,完成其功能。
typedef struct node {int data;
struct node *next;
}linknode,*link;
int ListInsert_L(link &L, int i, int e){ Linknode *p;int j; p = L; j = 0;
while(p && j < i-1){ p=p->next ; ++j; } // 寻找第i-1个结点 if(!p || j > i-1)return 0;
s=(link)malloc(sizeof(linknode));// 生成新结点s s->data = e;
s->next=p->next ; p->next = s; // 插入L中 return 1; }
2.对顺序栈的C语言描述算法如下,其中top为栈顶指针,请填充算法中标出的空白处,插入元素e为新的栈顶元素。
#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct{ char *base;char *top;int stacksize;}SqStack;
int Push(SqStack &S, char e){ //
if((-s.base)>=s.stacksize)//栈满,追加存储空间 { S.base=(SElemType *)realloc(S.base,S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base)return 0;
= s.base+s.stacksize ; //修改栈顶指针 S.stacksize += STACKINCREMENT; } *++=e ;//插入元素 return 1; }
3.对链队列的C语言描述算法如下,请填充算法中标出的空白处,删除队列Q 的队头元素并用e返回其值。typedef struct QNode{ QElemType data; struct QNode *next; }QNode, *QueuePtr;
typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue;
int DeQueue(LinkQueue &Q, QElemType &e){ Linknode *p;
if(Q.front==Q.rear)retrun 0;//队列空,返回 p = Q.front-> next; e = p->data;
Q.front-> next=p->next;//修改指针
if(Q.rear==p)Q.rear= Q.front ; //队列只有一个元素的情况 free(p);//释放结点空间 return 1; }
三、算法设计与分析题(每题10分,共20分)
1、简述下列算法实现的功能:(每题5分,共10分)(1)typedef struct LNode{
Char data;
struct LNode *next;}LNode,*LinkList;LinkList Demo(LinkList &L){ // L 是无头结点单链表 LNode *Q,*P;if(L&&L->next){
Q=L;L=L->next;P=L;while(P->next)P=P->next;
P->next=Q;Q->next=NULL;
} return L;}// Demo 答:将单链表的第一个结点删除,放到链尾。
———————————————————————————————————————————————————
(2)#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct{ int *base;int *top;int stacksize;
} Stack;void Demo1(Stack &S, int m){ Stack T;int i;
InitStack(T);//初始化栈
while(!StackEmpty(S))//判断栈是否为空
if((i=Pop(S))!=m)Push(T,i);//入栈操作
while(!StackEmpty(T))
{
i=Pop(T);//出栈操作
Push(S,i);
}
} 答:删除栈S中所有值为m的数据元素
2.有一个带头结点的单链表,头指针为head,编写一个算法计算所有数据域为X的结点的个数(不包括头结点)。typedef struct node {int data;struct node *next;}linknode,*link;int sample(link head, int X){ int count=0;link p=head->next;while(p){if(p->data==X)count++;p=p->next;} return count;}
◍ 数据结构课件
1、填空题。(每小题2分,本题满分20分)
(1) C++语言中,数组是按行优先顺序存储的,假设定义了一个二维数组A[20][30],每个元素占两个字节,其起始地址为2140,则二维数组A的最后一个数据元素的地址为 2140+2*(30*20-1) = 3338(3338,3339) 。
(2) 若A,B是两个单链表,链表长度分别为n和m,其元素值递增有序,将A和B归并成一个按元素值递增有序的单链表,并要求辅助空间为O(1),则实现该功能的算法的时间复杂度为 O(m+n) 。
(3) 快速排序的平均时间复杂度是______________。
(4) 假设有一个包含9个元素的最小堆,存放在数组A中,则一定比A[3]大的元素有个;一定比A[3]小的元素有个。(元素从第0个位置开始存放)
(5) 广义表(((A)),(B,C), D, ((A), ((E,F)))) 的长度是,深度是。
(6) 有10个元素的有序表,采用折半查找,需要比较4次才可找到的元素个数为。 (7)当两个栈共享一存储区时,栈利用一维数组A[n]表示,两栈顶指针为top[0]与top[1],则栈满时的判断条件为___top[0]+1=top[1]_ 或者 top[0] = top[1]+1 ___。 (8) 假设计算斐波那契数的'函数Fib(long n)定义如下:
long Fib(long n){ if(n<=1) return n;
else return Fib(n-1)+Fib(n-2) }
计算Fib(5)时的递归调用树(即指明函数调用关系的树)的高度是___4 _____。假设叶子结点所在的高度为0。
(9) 完全二叉树按照层次次序,自顶向下,同层从左到右顺序从0开始编号时,编号为i的结点的左子结点的编号为___2*i+1______。
(10) 假设用子女—兄弟链表方式表示森林,对应的二叉树的根结点是p,那么森林的第三棵树的根结点在二叉树中对应的结点是: ___p->rightchild->rightchild____________。假
2、选择题。(每小题2分,本题满分20分)
(1) 如果能够在只知道指针p指向链表中任一结点,不知道头指针的情况下,将结点*p从链
表中删除,则这个链表结构应该是: ( B,C )(多选题) A. 单链表 B. 循环链表 C. 双向链表 D. 带头结点的单链表 (2) 以下哪种矩阵压缩存储后会失去随机存取的功能?( A )
A. 稀疏矩阵 B. 对称矩阵 C. 对角矩阵 D. 上三角矩阵
(3) 下面哪一方法可以判断出一个有向图是否有环(回路):( B ) (选A,B也对)
A. 广度优先遍历 B. 拓扑排序 C. 求最短路径 D.求关键路径 (4) n个结点的线索二叉树(没有头结点)上含有的线索数为( B )
A. 2n B. n-l C. n+l D. n
(5) 循环队列存储在数组A[0..m]中,则入队时队尾指针rear的操作为( D )
A. rear=rear+1 B. rear=(rear+1) mod (m-1) C. rear=(rear+1) mod m D. rear=(rear+1)mod(m+1)
(6) 使用加权规则得到改进的Union操作WeightedUnion,其目的是: ( B )
A. 提高Union操作的时间性能 B. 提高Find操作的时间性能 C. 减少Union操作的空间存储 D. 减少Find操作的空间存储
-
我们精彩推荐数据结构课件专题,静候访问专题:数据结构课件