摘要: 问题描述 在别人的博客上看到起面试经历中的面试题,自己也想实现下,说实话,这道题以前做数据结构的课程设计是做过的,而且这样的题,当时还问了同学的,可是没有自己想,没有上心,到现在也就影响不太深刻了,当时可能也没有很好地理解数组的使用。给定一个整型数组,输入一个数字N时,要输出数组中第N大的数,并把它原来的下标输出来,要求用C语言实现,时间复杂度要求最小,20分钟时间。代码 View Code 1 #include<stdio.h> 2 int main() 3 { 4 int a[10],b[10],temp,n; 5 printf("请输入数组的长度\n"); 阅读全文
posted @ 2013-04-27 15:04 wj704 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 问题描述 对以逆波兰式的表达式求值。问题分析上一题是把中缀表达式编程逆波兰式,要对逆波兰的表达式的求解就更简单些了。代码View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define STACK_INIT_SIZE 100 4 #define STACKINCREMENT 10 5 typedef int ElemType; 6 typedef struct{ 7 ElemType *base; 8 ElemType *top; 9 int stacksize; 10 }stack; 1... 阅读全文
posted @ 2013-04-27 12:13 wj704 阅读(226) 评论(0) 推荐(0) 编辑
摘要: ---恢复内容开始----养成良好的习惯,看了下别人写的博客,条理清晰,美观,整洁。借鉴下。问题描述 设表达式有单字母变量和双目四则运算构成,试写一算法,将书写正确的表达式转换为逆波兰表达式。问题分析 要准确地理解逆波兰式,比如表达式a+b*c-a+b/e的逆波兰式是abc*+a-be/+,根据这一点可以理清算法的思路。输入一个表达式,保存到一个数组中,第一个肯定是操作数,依然在数组中,数组下标为0,然后再遍历下一个,当它为运算符是压入栈中,下一个操作数放在数组下标为1的位置,再判断下一个,为运算符,则与栈中已有的运算符进行比较,如果此运算符级别较大,则将此运算符压入栈,反之,将栈中的运算符先 阅读全文
posted @ 2013-04-27 10:59 wj704 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 问题描述:设以二维数组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 阅读全文
posted @ 2013-04-26 14:12 wj704 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 问题描述:试写一个判别表达式中开,闭括号是否配对出现的算法问题分析:这道题很简单,表达式存入数组中,判断,开,闭括号的个数相等,但是也要注意顺序,你不能出现这样的情况(【)】这个就不是正确的表达式了,也就是说两个匹配的操作符之间不能有其他的操作符。想到昨天做的简答题,把运算符入栈再去判断。Intmain(){Stacks;initStacks;Charbuffer[30];Inti;Charx,y;Scanf(“%s”,buffer);While(buffer[i]){If(buffer[i]==’(’||buffer[i]==’[’||buffer[i]==’)’||buffer[i]==’ 阅读全文
posted @ 2013-04-26 10:52 wj704 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 问题描述:写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如‘序列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 阅读全文
posted @ 2013-04-26 10:50 wj704 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 问题描述:火车调度站的入口处有n节硬席或软席车厢(以H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,使得所有软席车厢都被调整到硬席车厢之前。问题分析:此题主要解决的问题是,不管是入栈还是出栈,软席车厢要在硬席车厢之前一开始能想到的效果就是一头一尾都是软席,这样入栈和出栈都使得软席在硬席之前咯没看清题目啊,题目是说要把所有软席车厢都被调整到硬席车厢之前呢?亲啊。Intmain(){Stacks;Charbuffer[80];InitStack(s);Inti=0,j=0;Printf(“请输入序列\n”);While(i<s.stacksize){ 阅读全文
posted @ 2013-04-26 10:49 wj704 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 问题描述:假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存着两个栈,它们的栈底分别设在数组的两个端点,试编写实现这个双向栈tws的三个操作,初始化initstack(tws),入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈。问题分析:这道题主要是要求我掌握栈的初始化,入栈和出栈的算法。要注意的是,这两个栈在一维数组中。是不是思维有点懒呢?又想着看了,真不好。首先看下链栈的数据结构及方法的定义TypedefstructNodeType{ElemTypedata;NodeType*next;}NodeType,*Link 阅读全文
posted @ 2013-04-26 10:47 wj704 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 简答题中有这么一道题:设S和X分别表示入栈和出栈的操作,则初态和终态均为栈空的入栈和出栈的操作序列可以表示为仅由S和X组成的序列。可以操作的序列为合法,如(SXSX为合法序列,先进后出满足要求,SXXS为非法序列,先进后出,然后再出后进不符合逻辑,所以是非法序列。)试给出区分给定序列为合法序列或非法序列的一般准则,并证明:两个不同的合法序列(对同一输入序列,栈操作)不可能得到相同的输出元素序列问题分析:好像知道这么个道理,但是不知道怎么说解:一般准则是:任何前n个序列中S的个数一定大于X的个数。证明:设两个合法序列A,B,假设前n个操作都相同,栈顶元素设为a,第n+1个操作不同,设A的第n+1 阅读全文
posted @ 2013-04-26 10:43 wj704 阅读(1336) 评论(0) 推荐(0) 编辑
摘要: 问题描述:以循环链表做稀疏多项式的存储结构,编写求其导函数的算法,要求利用原多项式中的结点空间存放其导函数,同时释放所有无用结点问题分析:导函数应该很熟悉,所以写这个算法应该较简单。稀疏多项式采用的循环链表存储结构定义为:TypedefstructPolyNode{PolyTermdata;StructPolyNode*next;}PolyNode,*PolyLink;TypedefPolyLinkLinkedPoly;Typedefstruct{Intcoef;Intexp;}PolyTerm;StatusPolyDifferential(LinkedPoly&L){LinkedPo 阅读全文
posted @ 2013-04-26 10:40 wj704 阅读(798) 评论(0) 推荐(0) 编辑