摘要:
问题描述:已知稀疏多项式Pn(X)=c1x^e1+c2x^e2+....+cmx^em,其中n=em>em-1>....>e1>=0;ci!=0,m>=1.试采用存储量同多项式项数m成正比的顺序存储结构,编写求Pn(x0)的算法(x0为给定值),并分析你的算法的时间复杂度。问题分析:多项式的顺序存储结构为:Typedefstruct{Intcoef;Intexp;}PolyTerm;Typedefstruct{PolyTerm*data;Intlength;}SqPoly;//多看下,加深理解结构体什么叫做存储量同多项式项数m成正比的顺序存储结构?这意味着随着m的 阅读全文
摘要:
问题描述:一双向循环链表,每个结点除了prior,data和next三个域外,还增设了一个访问频度域freq。链表启用前,freq为0,每对链表进行一次LOCATE(L,x)的操作后,该结点的freq加1,同时调整链表中结点之间的次序,使得被频繁访问的结点总是靠近表头结点。编写符合上述要求的LOCATE算法。问题分析:重新把问题打在上面,更好地理解了一遍,也提高了自己的概括能力,挺好!看吧,当自己写时,总感觉有那么些别扭,可是看着别人的就豁然开朗,自己还没想到豁然开朗,思维的锻炼还不够。。。好吧,既然你已经看懂了答案了,很清晰的逻辑。但是我不想让自己现在就根据刚看的,然后写出来,看看明天还记不 阅读全文
摘要:
问题描述:假设在算法描述语言中引入指针的二元运算“异或”若a和b为指针,则a异或b的运算结果仍为原指针类型,且A异或(a异或b)=(a异或a)异或b=b;(A异或b)异或b=a异或(a异或b)=a;即可利用一个指针域来实现双向链表L。链表L中的每个结点只含两个域:data域和LRPtr域,其中LRPtr域存放该节点的左邻与右邻结点指针(不存在是为null)的异或。若设指针L.Left指向链表中的最左结点,L.Right指向链表中的最右结点,则可实现从左向右或从右向左遍历此双向链表的操作。试写一算法按任一方向依次输出链表中的各元素的值。问题分析:感觉有点回到高中时期,哪个时候,没做过的题,第一次 阅读全文
摘要:
1,问题描述:某个单向循环链表的长度大于1,且表中既无头结点也无头指针。S为指向链表中的某个结点指针,编写算法删除指针S所指结点的前驱结点 问题分析:循环链表的特点是最后一个结点的指针域指向头结点,整个链表形成一个环,因此可以从表中任一结点出发均可找到表中的其他结点。 算法如下:Status ListDelete_CL(LinkList &S){ LinkList p,q; If(s==s->next) return error;//这个条件也让你更好地理解下面的内容呢。 q=s; p=s->next; If(p->next!=s) { q =p; p=p->n 阅读全文
摘要:
问题描述:三个递增有序线性表A,B,C.对A有这样操作:删除既在B中又在C中出现的元素,分别对顺序表和单链表编写实现上述操作的算法,并分析时间复杂度。问题分析:此题的关键是对三个表中的元素进行比较,当A中有既在B中又在C中的元素时删除此元素。要这样比较,想到需要三个if嵌套,试着分析一下我的分析貌似有道理,用三个嵌套,答案是结合上面的题,做了个综合运用,莫非这就是综合概况能力呢?真的很奇妙呀。用顺序表实现的代码如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define LIST_INIT_SIZE 100 4 #defi 阅读全文
摘要:
问题描述:两个递增有序的线性表A,B表示两个集合,要求另给一空间构成线性表C,其元素为A和B中元素的交集,且C中的元素是递增有序,试对顺序表编写求C的算法。问题分析:有了上个题目的基础,这个题的解法应该容易想到些,两个线性表本身就是递增有序的,遍历的时候,比较两个线性表的元素,当相同时,把它加到C表中,这样就把C表构造成功了。关键对于我来说,怎样为表分配一空间,不是很清楚,还有这道题和上个题目的不同之处在于,C表的空间分配好后是往后面添加元素,记得前一个题是在它的前面加元素。先看下线性表的动态分配顺序存储结构:#defineLIST_INIT_SIZE100//线性表存储空间的起始分配量#de 阅读全文