摘要:
问题描述:设以二维数组g(1...m,1....n)表示一个图像区域,g[i,j]表示该区域中点(i,j)所具颜色,其值为从0到k的整数。编写算法置换点(i0,j0)所在区域的颜色。约定和(i0,j0)同色的上,下,左,右的邻结点为同色区域的点。问题分析:g[i,j]表示该区域中点(i,j)所具颜色,它本身代表的是一个点,它的值代表它的颜色,要置换(i0,j0)所在区域的点,也就是说要改变(i0,j0)的值算法:VoidChange(inti0,intj0){inti;Intg[m,n];G[i0,j0]=k;G[i0+1,j0]=k;G[i0,j0+1]=k;G[i0-1,j0]=k;G[i 阅读全文
摘要:
问题描述:试写一个判别表达式中开,闭括号是否配对出现的算法问题分析:这道题很简单,表达式存入数组中,判断,开,闭括号的个数相等,但是也要注意顺序,你不能出现这样的情况(【)】这个就不是正确的表达式了,也就是说两个匹配的操作符之间不能有其他的操作符。想到昨天做的简答题,把运算符入栈再去判断。Intmain(){Stacks;initStacks;Charbuffer[30];Inti;Charx,y;Scanf(“%s”,buffer);While(buffer[i]){If(buffer[i]==’(’||buffer[i]==’[’||buffer[i]==’)’||buffer[i]==’ 阅读全文
摘要:
问题描述:写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是问题分析:思路应该是有的,先读入字符序列,当读到‘&’时,前面的一个入队列,后面的一个进栈,然后都用数组来保存,最后比较两数组的元素是否都相同,若相同,则是该模式。Intmain(){Stacks;Queueq;Charbuffer1[20];Charbuffer2[20];Inti=0,count=0,j=0;Ch 阅读全文
摘要:
问题描述:火车调度站的入口处有n节硬席或软席车厢(以H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,使得所有软席车厢都被调整到硬席车厢之前。问题分析:此题主要解决的问题是,不管是入栈还是出栈,软席车厢要在硬席车厢之前一开始能想到的效果就是一头一尾都是软席,这样入栈和出栈都使得软席在硬席之前咯没看清题目啊,题目是说要把所有软席车厢都被调整到硬席车厢之前呢?亲啊。Intmain(){Stacks;Charbuffer[80];InitStack(s);Inti=0,j=0;Printf(“请输入序列\n”);While(i<s.stacksize){ 阅读全文
摘要:
问题描述:假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存着两个栈,它们的栈底分别设在数组的两个端点,试编写实现这个双向栈tws的三个操作,初始化initstack(tws),入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈。问题分析:这道题主要是要求我掌握栈的初始化,入栈和出栈的算法。要注意的是,这两个栈在一维数组中。是不是思维有点懒呢?又想着看了,真不好。首先看下链栈的数据结构及方法的定义TypedefstructNodeType{ElemTypedata;NodeType*next;}NodeType,*Link 阅读全文
摘要:
简答题中有这么一道题:设S和X分别表示入栈和出栈的操作,则初态和终态均为栈空的入栈和出栈的操作序列可以表示为仅由S和X组成的序列。可以操作的序列为合法,如(SXSX为合法序列,先进后出满足要求,SXXS为非法序列,先进后出,然后再出后进不符合逻辑,所以是非法序列。)试给出区分给定序列为合法序列或非法序列的一般准则,并证明:两个不同的合法序列(对同一输入序列,栈操作)不可能得到相同的输出元素序列问题分析:好像知道这么个道理,但是不知道怎么说解:一般准则是:任何前n个序列中S的个数一定大于X的个数。证明:设两个合法序列A,B,假设前n个操作都相同,栈顶元素设为a,第n+1个操作不同,设A的第n+1 阅读全文
摘要:
问题描述:以循环链表做稀疏多项式的存储结构,编写求其导函数的算法,要求利用原多项式中的结点空间存放其导函数,同时释放所有无用结点问题分析:导函数应该很熟悉,所以写这个算法应该较简单。稀疏多项式采用的循环链表存储结构定义为:TypedefstructPolyNode{PolyTermdata;StructPolyNode*next;}PolyNode,*PolyLink;TypedefPolyLinkLinkedPoly;Typedefstruct{Intcoef;Intexp;}PolyTerm;StatusPolyDifferential(LinkedPoly&L){LinkedPo 阅读全文
摘要:
问题描述:已知稀疏多项式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 阅读全文