




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、整理了网上机试题,近几十个网页的资料,同时本人对每道题均进行了验证。并且对一些题目进行了更好的修正。希望对后来者有所帮助。1第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入 1,2,3,4 则输出为 5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入 1,则输出为 2;另外数组的长度不超过 50#includemain()min_num=num0;max_num=num0;num50=0;i,n;for(j=0;jn;j+)if(max_numnumj)min_num=numj;prf(请输入整型数组的长度(150):);scanf(%d,&n);prf(请输入
2、整型数组的元素:); for (i=0;i0&len_num20;len_num1-,len_nu m2-)sumlen_max-=(num1len_num1-1-0)+(num2len_num2-1-0);if(len_num10)sumlen_max-=num1len_num1 - 1 -0; len_num1-;if(len_num20)sumlen_max-=num1len_num2 - 1-0; len_num2-;#include#include #include main()char *num1,*num2; char *sum;/两个长长整型数据/temp;len_num1,l
3、en_num2; / len_max,len_min;两个长长整型数据的长度num1=(char*)malloc(sizeof(char);num2=(char*)malloc(sizeof(char); prf(输入两个长长整型数据:); scanf(%s,num1);prf(输入两个长长整型数据:); scanf(%s,num2);len_num1=strlen(num1); len_num2=strlen(num2);len_max=(len_num1=len_num2)? len_num1:len_num2;len_min=(len_num1=0;j-) /实现进位操作for(/tem
4、p=sumj-0;if(sumj=10)sumj-1+=sumj/10; sumj%=10;for(m=0;mlen_max1;j+,m+)outsumm=sumj+0;outsumm=0;prf(输出两长长整型数据之和:%sn,outsum); return 0;char *outsum=(char*)malloc(sizeof(char)*len_max1); j=0;while(sumj=0)/跳出头部 0 元素j+;#include #include #includevoid stringFilter(const char *p_str, long len, char *p_outst
5、r)array256=0;const char *tmp = p_str; for(j=0;jlen;j+)if(arraytmpj=0)*p_outstr+= tmpj; arraytmpj+;*p_outstr = 0;void main()char*str = cccddecc; len = strlen(str);char * outstr = (char *)malloc(len*sizeof(char); stringFilter(str,len,outstr);prf(%sn,outstr); free(outstr);outstr = NULL;4.通过键盘输入一串小写字母(a
6、z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:3.通过键盘输入一串小写字母(az)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr: 输入字符串lInputLen: 输入字符串长度【输出】 pOutputStr: 输出字符串,空间已经开
7、辟好,与输入字符串等长;#include #include #include*p_outstr+ =p_stri;count = 1;/注意其位置void stringZip(const char *p_str, long len, char *p_outstr)count=1;*p_outstr = 0;for(i=0;i1)*p_outstr+ = count +0;*p_outstr+ =p_stri;elsevoid main()char *str = cccddecc;prf(压缩之前的字符串为:%sn,str); len = strlen(str);char * outstr =
8、(char*)malloc(len*sizeof(char); stringZip(str,len,outstr);prf(压缩之后的字符串为:%sn,outstr); free(outstr);outstr = NULL;#include 5.通过键盘输入 100 以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。输入字符串的格式为:“操作数 1 运算符 操作数 2”,“操作数”与“运算符”之间以一个空格隔开。补充说明:操作数为正整数,不需要考虑计算结果溢出的情况。若输入算式格式错误,输出结果为“0”。要求实现函数:void arithmetic(const char *pInpu
9、tStr, long lInputLen, char *pOutputStr);【输入】 pInputStr: 输入字符串lInputLen: 输入字符串长度【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;仅压缩连续重复出现的字符。比如字符串abcbc由于无连续重复字符,压缩后的字符串还是abcbc.压缩字段的格式为字符重复的次数+字符。例如:字符串yyyyyyz压缩后就成为3x6yz要求实现函数:void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInput
10、Str: 输入字符串lInputLen: 输入字符串长度【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;#include#includevoid arithmetic(const char *input, long len, char *output)char s110; char s210; char s310;cnt = 0;len_input=strlen(input); for(i=0;ilen_input;+i)if(inputi= ) cnt+;if(cnt!=2)*output+ = 0;*output = 0; return;sscanf(inp
11、ut,%s %s %s,s1,s2,s3);if(strlen(s2)!=1|(s20!=+&s20!=-)*output+ = 0;*output = 0; return;len_s1=strlen(s1);for(i=0;ilen_s1;i+)if(s1i9)*output+ = 0;*output = 0; return;len_s3=strlen(s3);for(i=0;ilen_s3;i+)if(s3i9)*output+ = 0;*output = 0; return;x = atoi(s1);y = atoi(s3); if(s20=+)result = x+y; itoa(re
12、sult,output,10);else if(s20=-)result = x-y;itoa(result,output,10);else*output+ = 0;*output = 0; return;void main()char str = 10 - 23; char outstr10;len = strlen(str);arithmetic(str,len,outstr); prf(%sn,str);prf(%sn,outstr);6.一组人(n 个),围成一圈,从开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人(环是一个数学的应用问题:已知 n 个人(以1,2,
13、3.n 分别表示)围坐在一张圆桌周围。从为 k的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。)#include #include #include#includetypedef struct Nodedata;struct Node *next;LinkList;LinkList *create(n)LinkList *p,*q,*head;i=1;p=(LinkList*)malloc(sizeof(LinkList); p-data=i;he;for(i=1;idata=i+1;p-next=q;
14、 p=q;p-next=head;/使链表尾连接链表头,形成循环链表 return head;free(p); p=NULL;free(q);q=NULL;void deletefun(LinkList *L,LinkList *p,*q,*temp; i;p=L;m)while(p-next!=p)for(i=1;inext;prf(%5d,p-data); temp=p;q-next=p-next;p=p-next;free(temp);prf(%5dn,p-data);main()n=7,m=3;LinkList *head1; head1=create(n); deletefun(he
15、ad1,m);return 0;7.输入一串字符,只包含“0-10”和“,”找出其中最小的数字和最大的数字(可能不止一个),输出最后剩余数字个数。如 输入 “3,3,4,5,6,7,7”#include #include#includevoid main()char str100;prf(输入一组字符串:n); scanf(%s,&str);len=strlen(str);array100; count=0;for(i=0;i=0&stri=9)arraycount+=stri-0;arraycount=0; result=count; min=array0; max=array0;for(j
16、=0;jcount;j+)if(maxarrayj)min=arrayj;for(k=0;kcount;k+)if(arrayk=min) result-;if(arrayk=max) result-;prf(%dn,result);8.输入一组身高在 170 到 190 之间(5 个身高),比较身高差,选出身高差最小的两个身高;若身高差相同,选平均身高高的那两个身高;从小到大输出;如 输入 170 181 173 186 190 输出 170 173#include #include #define N 5main()HeightN;dmin; H1,H2;i,j,temp;prf(请输入一
17、组身高在 170 到 190 之间的数据(共 5 个):n);for(k=0;kN;k+)scanf(%d,&Heightk);prf(n);for(i=0;iN;i+)for(j=1;jHeightj;j+)temp=Heightj-1;Heightj-1=Heightj; Heightj=temp;H1=Height0;H2=Height1; dmin=H2-H1;for(m=2;mN;m+)if(Heightm-Heightm-1=dmin)H1=Heightm-1; H2=Heightm;dmin=Heightm-Heightm-1;prf(身高差最小的两个身高为:n); prf(%d
18、,%dn,H1,H2);return 0;9. 删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#include #include #include #include delete_sub_str(const char *str,const char *sub_str,char *result)assert(str != NULL & sub_str != NULL); const char *p,*q;char *t,*temp; p = str;q = sub_str; t = result;n,count = 0; n = strlen(q);temp = (cha
19、r *)malloc(n+1); memset(temp,0 x00,n+1); while(*p)memcpy(temp,p,n);if(strcmp(temp,q) = 0 )count+;memset(temp,0 x00,n+1); p = p + n;else*t = *p; p+; t+;memset(temp,0 x00,n+1);free(temp); return count;void main()char s100 = 0;num = delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);prf(“The number of
20、 sub_str is %drn”,m); prf(“The result string is %srn”,s);10. 要求编程实现上述高精度的十进制加法。要求实现函数:void add (const char *num1, const char *num2, char *result)【输入】num1:字符串形式操作数 1,如果操作数为负,则 num10为符号位- num2:字符串形式操作数 2,如果操作数为负,则num20为符号位-【输出】result:保存加法计算结果字符串,如果结果为负,则result0为符号位。#include#include #includelength)/移除字
21、母前的-符号void move(char *str,if(str0 != -)return;i;for(i = 0; i 0; i-)/从最后开始移除 0,直到遇到非 0 数字,只对最初位置上的 0 不予判断if(resulti = 0)resulti = 0; count+;elsereturn length-count;return length - count;/将字符串倒转void reverse(char *result,char temp;length)for(i = 0; i = 0 & j = 0; i-, j-)n1 = str1i - 0;n2 = str2j - 0;cu
22、rSum = n1 + n2 + another;resultcur_rs+ = curSum % 10 + 0; another = curSum / 10;if(j = 0)/遍历 str1 剩余各位n1 = str1i- - 0;curSum = n1 + another;resultcur_rs+ = curSum % 10 + 0; another = curSum / 10;if(another != 0)/如果还有进位未加上resultcur_rs+ = another + 0;elsewhile(j = 0)n2 = str2j- - 0;curSum = n2 + anoth
23、er;resultcur_rs+ = curSum % 10 + 0; another = curSum / 10;if(another != 0)resultcur_rs+ = another + 0;resultcur_rs = 0;cur_rs = remove_zero(result, cur_rs);if(!flag)resultcur_rs+ = -; resultcur_rs = 0;reverse(result, strlen(result); return cur_rs;real_minus(char *str1, char *str2, char *result)/使用 s
24、tr1 减去 str2char big100, small100;big_len, sml_len;len1 = strlen(str1);len2 = strlen(str2); bool flag = false;/用于标记 str2 是否比str1 大if(len1 len2)flag = true;else if(len1 = len2)if(strcmp(str1, str2) = 0)result0 = 0;result1 = 0; return 1;else if(strcmp(str1,str2) =0 & j=0; i-,j-)n1 = str1i - 0;n2 = str2
25、j - 0;if(n1 = n2+another)resultcur_rs+ = (n1-n2-another) +0; another = 0;elseresultcur_rs+ = (n1+10-n2-another) + 0; another = 1;while(i = 0)n1 = str1i- - 0;if(another != 0)n1 -= another; another = 0;resultcur_rs+ = n1 + 0;resultcur_rs = 0;cur_rs = remove_zero(result, cur_rs); if(flag)resultcur_rs+
26、= -; resultcur_rs = 0;reverse(result, cur_rs);return cur_rs;void addi(const char *num1, const char *num2, char *result)len1 = strlen(num1); len2 = strlen(num2);rs_len;if(!len1 | !len2)return;char str1100, str2100; strncpy(str1, num1, len1); str1len1 = 0; strncpy(str2, num2, len2);str2len2 = 0;if(str
27、10 = - & str20 = -)move(str1, len1); move(str2, len2);rs_len = real_add(str1, str2, result, false);else if(str10 = -)move(str1, len1);rs_len = real_minus(str2, str1, result);else if(str20 = -)move(str2, len2);rs_len = real_minus(str1, str2, result);elsers_len = real_add(str1, str2, result, true);/ma
28、in(main()argc, char *argv)char num1100,num2100;prf(请输入两个整型数据:n); scanf(%s%s,num1,num2);char result100;memset(result, 0, 100); addi(num1,num2, result); prf(%sn, result);return 0;11. 描述:10 个学生考完期末评卷完成后,A 老师需要划出及格线,要求如下:(1)(2)(3)及格线是 10 的倍数;保证至少有 60%的学生及格;如果所有的学生都高于 60 分,则及格线为 60 分输入:输入 10 个整数,取值 0100输
29、出:输出及格线,10 的倍数#includevoid bubblesort(i,j,temp;arr)for(i=0;i10;i+)for(j=0;jarrj+1;j+)temp=arrj; arrj=arrj+1; arrj+1=temp;GetPassLine(a)bubblesort(a);if(a0=60)return 60;elsereturn ()a4/10)*10);main()a10=0;result;prf(请随机输入 10 个成绩(0-100):n);scanf(%d%d%d%d%d%d%d%d%d%d,&a0,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8
30、,&a9);prf(n);result=GetPassLine(a);prf(及格线为:%dn,result); return 1;12. 描述:一条长廊里依次装有 n(1 n 65535)盏电灯,从头到尾拉线开关控制。开始,电灯全部关着。1、2、3、n-1、n。每盏电灯由一个有 n 个学生从长廊穿过。第一个学生把号码凡是 1 的倍数的电灯的开关拉一下;接着第二个学生把号码凡是 2 的倍数的电灯的开关拉一下;接着第三个学生把号码凡是 3 的倍数的电灯的开关拉一下;如此继续下去,最后第 n 个学生把号码凡是 n 的倍数的电灯的开关拉一下。n 个学生按此规定走完后,长廊里电灯有几盏亮着。注:电灯数
31、和学生数一致。输入:电灯的数量输出:亮着的电灯数量样例输入:3样例输出:1#include#define Max_Bubl_Num 65535GetLightLampNum(n)BublNumMax_Bubl_Num=0;/0 表示灯灭,1 表示灯亮unsignedunsignedi,j;count=0;for(i=1;i=n;i+)for(j=i;j=n&j%i=0;j+)BublNumj-1+=1;BublNumj-1=BublNumj-1%2;for(k=0;kn;k+)if(BublNumk=1) count+;return count;main()n,result;prf(请输入灯的
32、数量(1-65535):n); scanf(%d,&n);result=GetLightLampNum(n);prf(最后亮灯的数量为:%dn,result); return 0;13. 描述:已知 2 条地铁线路,其中 A 为环线,B 为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用 T1、T2 表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。地铁线 A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A
33、18地铁线 B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15输入:输入两个不同的站名输出:输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次输入样例:A1 A3输出样例:3 #include #include #include#includeusing namespatd;#define MAX 35#define SUBWAY_A 20#define SUBWAY_B 15 typedef struct nodeadjvex;struct node *next;edgenode;typedef str
34、uctchar name10; bool flag;edgenode *link;vexnode;constcharsubway_name1SUBWAY_A10=A1,A2,A3,A4,A5,A6,A7,A8,A9,T1,A10,A11,A12,A13,T2,A14,A15,A16,A17,A18;constcharsubway_name2SUBWAY_B10=B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15;void creat(vexnode ga)i;edgenode *p;for(i=0;iMAX;i+)gai.link=NULL;
35、gai.flag=true;if(iSUBWAY_A) strcpy(,subway_name1i); else strcpy(,subway_name2i-20);/A 地铁建邻接表for(i=1;iadjvex=i-1;p-next=NULL; gai.link=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=i+1;p-next=NULL; gai.link-next=p; if(i=9)p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+4;p-
36、next=NULL;gai.link-next-next=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+5;p-next=NULL;gai.link-next-next-next=p;else if(i=14)p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+9;p-next=NULL;gai.link-next-next=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+10;p-next=NUL
37、L;gai.link-next-next-next=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A-1;p-next=NULL; ga0.link=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=1;p-next=NULL;ga0.link-next=p;p=(edgenode*)malloc(sizeof(edgenode);p-adjvex=SUBWAY_A-2; p-next=NULL; gaSUBWAY_A-1.link=p;p=(edgenode*)malloc(si
38、zeof(edgenode); p-adjvex=0;p-next=NULL;gaSUBWAY_A-1.link-next=p;/B 地铁建邻接表for(i=1;iadjvex=SUBWAY_A+i-1;p-next=NULL;gai+SUBWAY_A.link=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+i+1;p-next=NULL;gai+SUBWAY_A.link-next=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+3;p-next=NULL
39、;gaSUBWAY_A+4.link=p;p=(edgenode*)malloc(sizeof(edgenode);p-adjvex=9;p-next=NULL; gaSUBWAY_A+4.link-next=p;p=(edgenode*)malloc(sizeof(edgenode);p-adjvex=9;p-next=NULL; gaSUBWAY_A+5.link=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+6;p-next=NULL;gaSUBWAY_A+5.link-next=p;p=(edgenode*)mall
40、oc(sizeof(edgenode);p-adjvex=SUBWAY_A+8; p-next=NULL; gaSUBWAY_A+9.link=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=14;p-next=NULL;gaSUBWAY_A+9.link-next=p;p=(edgenode*)malloc(sizeof(edgenode);p-adjvex=14; p-next=NULL;gaSUBWAY_A+10.link=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+
41、11;p-next=NULL;gaSUBWAY_A+10.link-next=p;p=(edgenode*)malloc(sizeof(edgenode);p-adjvex=SUBWAY_A+1; p-next=NULL; gaSUBWAY_A.link=p;p=(edgenode*)malloc(sizeof(edgenode);p-adjvex=SUBWAY_A+SUBWAY_B-2; p-next=NULL; gaSUBWAY_A+SUBWAY_B-1.link=p;/打印各邻接节点for(i=0;i%s,); s=s-next;prf(n);main()v
42、exnode gaMAX; creat(ga);i;char str210;while(scanf(%s%s,str0,str1)!=EOF)temp=0;for(i=0;iMAX;i+)gai.flag=true;if(!strcmp(str0,) temp=i;queueq; q.push(gatemp); gatemp.flag=false;count=0; start=0; end=1;bool find_flag=false; while(!q.empty()if(find_flag) break; count+;prf(*n); prf(第%d 层搜索:,count
43、);temp_end=end; while(startadjvex.flag)q.push(gas-adjvex); gas-adjvex.flag=false; end+;/prf(%s ,);s=s-next;q.pop(); start+;prf(n);prf(%dn,count);return 0;14. 字串转换问题描述:将输入的字符串(字符串仅包含小写字母a到z),按照如下规则,循环转换后输出:a-b,b-c,y-z,z-a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换 2 次。例如:aa相同字母超过两个时,第三个出现的字母按第一次出现
44、算。要求实现函数:转换为bc,zz转换为ab;当连续void convert(char *inphar* output)输入的字符串,输出的字符串【输入】【输出】【返回】char *input ,char *output无#include#include #includevoid convert(char *inpif(input=NULL) return;char temp=0;har* output)len_input=strlen(input);i;flag=0;for(i=0;ilen_input;i+)if(inputi!=temp)outputi=(inputi-a+1)%26+a
45、; temp=inputi;flag=1;elseif(flag=1)outputi=(inputi-a+2)%26+a;temp=inputi; flag=0;elseoutputi=(inputi-a+1)%26+a;temp=inputi; flag=1;outputi=0;void main()char *input=xyz; char output256;/scanf(%s,input); convert(input,output); prf(%sn,output);15. 在给定字符串中找出单词( “单词”由大写字母和小写字母字符,其他非字母字符视为单词的间隔,如空格、问号、数字等
46、等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。要求实现函数:void my_word(charinput, char output)【输入】【输出】【返回】char input, 输入的字符串char output,输出的字符串无#include #include #include void my_word(char input,char output)ch
47、ar *p; char *temp;char *word10;len_input=strlen(input); i,j;char except = ,;char *bl= ;i=0;for (i=0;ilen_input;i+)if (inputiZ&inputiz)inputi=,;j=0;/*保存取出的单词*/ p= strtok(input,except); while(NULL!=p)wordj+=p;p= strtok(NULL,except);for(i=0;i5;i+)prf(%s,wordi);/*对单词按照长度降序排序,冒泡法*/ for (i=0;i5;i+)for (j=
48、1;j5-i;j+)if(strlen(wordj-1)strlen(wordj)temp=wordj; wordj=wordj-1; wordj-1=temp;/*删除相同单词*/ for (i=0;i5;i+)for(j=i+1;j5;j+)if(strcmp(wordi,wordj)=0) wordj=0;/*将单词连接起来输出*/ for (j=0;j5;j+)if (0=j)strncpy(output,wordj,strlen(wordj)+1);elsestrcat(output,bl);strcat(output,wordj);return ;main()char input
49、=some local buses, some1234123drivers;prf(筛选之前的字符串:%sn,input); char output30;my_word(input,output);prf(筛选之后的字符串:%s,output); prf(n);return 0;. 数组中数字都两两相同,只有一个不同,找出该数字:findUnique(* a,len)i = 1;temp = a0; for(; i len; i+)temp = temp ai;prf(%d , temp);17. 题目二:数组中数字两两相同,有两个不同,找出这两个:#include a = 1,1,2,4,3
50、,3,2,5;findXorSum(* a,len)i = 0;temp = 0;for(; i 1;count+;return count;isBit1(a,count)a = a count-1;return (a & 1);voidfindTwoUnique(* a,len)i = 0;m = 0, n = 0;temp = findXorSum(a, len);count = find for(; i len; i+)Bit1(temp);if(isBit1(ai,count)m = m ai;elsen = n ai;prf(%d, %d, m, n);main()findTwoUn
51、ique(a,8);18. 链表翻转。给出一个链表和一个数 k,比如链表 123456,k=2,则翻转后 214365,若 k=3,翻转后 321654,若 k=4,翻转后 432156,用程序实现:采用遍历链表,分成length/k 组,对每组进行逆转,逆转的同时要将逆转后的尾和头连接起来/#include stdafx.h #include stdio.h #include stdlib.h#includetypedef struct Nodevalue; Node* next;LinkList;void Converse(LinkList* pPre,LinkList* pCur) /链
52、表逆转LinkList* p = NULL;LinkList* pNext = NULL; p = pPre-next;LinkList* p1= NULL; if(pCur!=NULL)pNext = pCur-next;while( p!=pNext)p1 = p-next;p-next = pPre; pPre = p;p = p1;main()count = 0, k,i=0,j=0,flag = 1,length=0,groups = 0;scanf(%d,&k);LinkList* pPre = (LinkList*)malloc(sizeof(LinkList); LinkLis
53、t* pCur = (LinkList*)malloc(sizeof(LinkList); LinkList* pNext = (LinkList*)malloc(sizeof(LinkList); LinkList* head = NULL;LinkList* pTempTail = NULL; /指向逆转之后的尾部LinkList* pTempHead = NULL;pCur-value = 1;pPre = pCur;/创建初始链表 for(i=2;ivalue = i; pCur-next = node; pCur = node;pCur-next = NULL;/最后一定要置 NUL
54、L,c+中用 new 则无须置 NULLpCur = pPre;while(pCur!=NULL)length+;pCur = pCur-next;i=0;groups = length/k; /分成 K 段pCur = pPre; while(i=groups)count = 0;while(countk-1 & inext; count+;if(inext;pTempHead = pCur;/*没做翻转之前的头部,变成了翻转之后的尾部*/ if(flag = 0)pTempTail-next = pTempHead;pTempTail = pPre; Converse(pPre,pCur)
55、;/pTempTail = pPre; if(flag=1)head = pCur; flag = 0;pCur = pNext;elsepTempTail-next = pNext;pPre = pCur; i+;pCur = head;while(jvalue); pCur = pCur-next;prf(n);/system(pause); return 0;19. 链表相邻元素翻转,如 a-b-c-d-e-f-g,翻转后变为:b-a-d-c-f-e-g #include #include #include typedef struct nodechar val;struct node*
56、 pNext;Node;Node* Creaist(n);void Traverslist(Node* pHead);Node* TransNeighbor(Node* pHead);main()Node* pHead = Creaist(7);prf(before transformn);Traverslist(pHead); TransNeighbor(pHead);prf(nafter transformn); Traverslist(pHead);getchar();return 1;/创建新链表 Node* Creaist(n)Node* pHead = (Node*)malloc(
57、sizeof(Node);Node* pTail = pHead; pTail-pNext=NULL;i;for(i=0; i val = a+i;pTail-pNext = pNew;pNew-pNext = NULL; pTail = pNew;return pHead;void Traverslist(Node* pHead)Node* p = pHead-pNext;is= 0;while(p!= NULL)if(is=0)priselseprf(%c,p-val);=1;f(-%c,p-val);p = p-pNext;return;Node* TransNeighbor(Node*
58、 pHead)Node* p = pHead-pNext;while(p-pNext!=NULL & p-pNext-pNext!=NULL)char value = p-val;p-val=p-pNext-val; p-pNext-val=value; p=p-pNext-pNext;return pHead;20. 输入一串字符串,其中有普通的字符与括号组成(包括(、)、,),要求验证括号是否匹配,如果匹配 则输出 0、否则输出 1.#include #include/#define MAX 100main()char a100,c=(1+2);i=0,j=0;flag=0;while(c
59、i!=NULL&flag=0)switch(ci)case():case():aj+=ci;break;case():if(aj-1=()aj-1=0; j-;elseflag=1; break;case():if(aj-1=)aj-1=0; j-;elseflag=1; break;i+;if(j!=0) flag=1;prf(%dn,flag); return 0;方法 2:#include #include#include / !分配内存头文件 #define m 20typedef char ElemType; typedef structElemType stackm; top;st
60、acknode;stacknode *sp;Init(stacknode *st)st-top=0; return 0;void Push(stacknode *sif(st-top=m)emType x)prf(The stack is overflow!n);elsest-top=st-top+1; st-stackst-top=x;void Pop(stacknode *st)st-top=st-top-1;main()char sm=(); i;prf(Creat a stack!n);sp = (stacknode *)malloc(sizeof(stacknode); Init(s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业用水电供应与使用协议
- 化妆品销售排行榜统计表
- 销售区域业绩对比表
- 汽车发动机结构与维修知识阅读题
- 银行保卫考试试题及答案
- 易班新生考试试题及答案
- 医院药局考试试题及答案
- 六一儿童酒店活动方案
- 医学伦理考试试题及答案
- 六一建构活动方案
- 2025年安全生产考试题库:安全生产隐患排查治理安全教育培训试题
- 马列原著选读试题及答案
- 2025国开电大《个人与团队管理》形考任务1-10答案
- 湖南2024生地会考试卷及答案
- 2024小学语文教学及说课课件:六年级上册《只有一个地球》
- PLC装配流水线模拟控制课程设计
- biggs学习策略问卷SPQ-英文版
- 新闻发布系统-需求规格说明书
- (完整word版)最新防雷装置检测工程质量管理手册
- DL_5000-2000_火力发电厂设计技术规程
- 四害密度监测工作实施方案
评论
0/150
提交评论