东北大学842考研

2009-d-二-2

void swap(BTNode *T) { BTNode *p,*temp; p=T; if(p!=NULL) { //交换左右子树 temp=p->rchild; p->rchild=p->lchild; p->lchild=temp; //递归实现全部指针互换 swap(p->lchild); swap(p->rchild); } }

2009-d-二-3

//天勤p150原题 BTNode *CreateBT(char pre[],char in[],int l1,int r1,int l2, int r2) { BTNode *s; int i; if(l1>r1) return NULL; s=(BTNode*)malloc(sizeof(BTNode)); s->lchild=s->rchild=NULL; for(i=l2,i<r2;++i) if(in[i]==pre[l1]) break; s->data=in[i]; s->lchild=CreateBT(pre,in,l1+1,l1+i-l2,l2,i-1); s->rchild=CreateBT(pre,in,l1+i-l2+1,r1,i+1,r2); return s; }

2010-d-二-1

int fun(LNode *l) { int max,min; LNode *p; p=l; max=p->data; min=p->data; //先找出最大值最小值 while(p!=NULL) { if(p->data>max) max=p->data; if(p->data<min) min=p->data; p=p->next; } //判断是否符合要求 while(p->next->next!=NULL&&p->data==p->next->data+p->next-next->data) { p=p->next; } //判断退出循环时p->next->next的值是否为空,不为空证明提前跳出循环 if(p->next->next->data==NULL) { printf("%d",max); return 1; }else{ printf("%d",min); return 0; } }

2010-d-二-2

//类似于天勤p136 double calfun(BTNode *p) { int l,r; if(p!=NULL) { if(p->lchild!=NULL&&p->rchild!=NULL) { l=calfun(p->lchild); r=calfun(p->rchild); return op(l,r,p->data); } else return p->data;//假设采用数值型存储 } else return 0; }

2010-d-二-3

//void BFS(AGraph *G,int v,int visit[maxSize]) void DS(AGraph *G,int v,int visit[maxSize]) { //visit数组被初始化为全0 ArcNode *p; //int que[maxSize],front=0,rear=0; int stack[maxSize],top=-1; int j; visit[v]=1; //rear=(rear+1)%maxSize; //que[rear]=v; stack[++top]=v; while(front!=rear) { //front =(front+1)%maxSize; //j=que[front]; j=stack[top--]; p=G->adjlist[j].firstarc; while(p!=NULL) { if(visit[p->adjvex]==0) { visit[p->adjvex]=1; //rear=rear+1; //que[rear]=p->adjvex; stack[++top]=p->adjvex; } p=p->nextarc; } } }

2011-c-一-5

//递增:1,不递增:0 int dec(int a[],int n) { if(n==0) return 1; //递增 if(a[n]>a[n-1]) return dec(a,n-1); else return 0; //不递增 } 方法二: int dec(int a[], int n) { //printf("n=%d,",n); //printf("a[0]=%d\n",a[0]); if (n <= 1) { return 0;//非递增 } if (a[0] < a[1]) { return dec(++a,--n);//注意n--是先把值给dec再减 }else{ return 1;//递增 } } int main() { int a[]={1,2,9,5}; printf("%d",dec(a,4)); }

2011-c-二-1

#include <stdio.h>#include <stdlib.h>int main() { //定义文件指针 FILE *p; char c; int num=0; //打开文件 if((p=fopen(".\\demo.txt","r"))==NULL) { printf("error"); exit(-1); } while(fscanf(p,"%c",&c)!=EOF) { ++num; printf("%c",c); if(num==10) { printf("\n"); num=0; } } }

2011-c-二-2

//分为三部分复制到新的字符串中 char *stuff(char *str1,char *str2,int i,int j) { char buf[512]; char *p,*q; int m; p=str1; q=buf; //复制前半段 for(m=0;m<i;m++) { *q=*p; p++; q++; } //插入替换部分 p=str2; while(*p!='\0') { *q=*p; p++; q++; } //复制后半部分 p=str1+j+1; while(*p!='\0') { *q=*p; p++; q++; } *q='\0';//字符串结束 return buf; } int main() { char a[64]="asdfghjkdffsfjhfj"; printf("%s\n",stuff(a,"12345",6,8)); }

2011-c-二-3

与2014-c-三-3相同,查找二维数组鞍点 #include <stdio.h>#include <stdlib.h>#define maxSize 100 typedef struct LNode { int data; struct LNode *next; } LNode; //数组进行排序、递增 void sort(int a[],int n) { int i,j,temp; //冒泡法排序 for(i=n;i>=1;--i) { for(j=2;j<=i;++j) { if(a[j-1]>a[j]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } } } //构造链表并输出 void createList(int a[],int n) { LNode *c,*s,*r,*p; int i; c=(LNode*)malloc(sizeof(LNode)); c->data=a[1]; c->next=NULL; r=c; for(i=2;i<=n;++i) { s=(LNode*)malloc(sizeof(LNode)); s->data=a[i]; s->next=NULL; r->next=s; r=r->next; } //输出链表 p=c; for(i=1;i<=n;++i) { if(p!=NULL) { printf("%d\n",p->data); p=p->next; } } } int main() { //数组下标从1开始 int arr[maxSize]; int temp,n=0,flag=1; while(flag==1) { scanf("%d",&temp); if(temp!

2011-d-二-1

#include <stdio.h>#include <stdlib.h>#define maxSize 100 typedef struct LNode { int data; struct LNode *next; } LNode; //数组进行排序、递增 void sort(int a[],int n) { int i,j,temp; //冒泡法排序 for(i=n;i>=1;--i) { for(j=2;j<=i;++j) { if(a[j-1]>a[j]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } } } //构造链表并输出 void createList(int a[],int n) { LNode *c,*s,*r,*p; int i; c=(LNode*)malloc(sizeof(LNode)); c->data=a[1]; c->next=NULL; r=c; for(i=2;i<=n;++i) { s=(LNode*)malloc(sizeof(LNode)); s->data=a[i]; s->next=NULL; r->next=s; r=r->next; } //输出链表 p=c; for(i=1;i<=n;++i) { if(p!=NULL) { printf("%d\n",p->data); p=p->next; } } } int main() { //数组下标从1开始 int arr[maxSize]; int temp,n=0,flag=1; while(flag==1) { scanf("%d",&temp); if(temp!