




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. 有序表的归并#include#includetypedef struct List int date; struct List *next; List; List *head1,*head2,*head3;int IsEmpty(List *p) p=p-next; if(p=NULL) return 0; else return 1; /判断是否为空,是的话返回0;int IsLast(List *p) if(p=NULL) return 0; else return 1; /判断链表是否达到最后一个,是的话返回0List *Insert(List *head,int n) List *p,*q; p=(List *)malloc(sizeof(List); p-date=n; p-next=NULL; q=head; while(q-next!=NULL) q=q-next; q-next=p; return head; /传入一个date值,将这个值插入到一 head为头的链表中,返回head List *MakeList(List *head,FILE *fp) int length; fscanf(fp,%d,&length); int dat; List *p=NULL; List *q=NULL; q=head; for(int i=0;idate=dat; q-next=p; p-next=NULL; q=p; return head; /创建以head为头,长度为length的链表 void ShowList(List *head,FILE *fp) int flag=1; List *p; p=head; while(flag) fprintf(fp,%d ,p-date); p=p-next; flag=IsLast(p); int main() / 以下是实验要求的实现 int flag1,flag2; List *p,*q; FILE *fp; fp=fopen(input.txt,r);head1=(List *)malloc(sizeof(List);head2=(List *)malloc(sizeof(List);head3=(List *)malloc(sizeof(List); head1-date=0; head1-next=NULL; head2-date=0; head2-next=NULL; head3-date=0; head3-next=NULL;head1=MakeList(head1,fp); head2=MakeList(head2,fp);fclose(fp);fp=fopen(output.txt,w);p=head1-next; q=head2-next;flag1=IsLast(p); flag2=IsLast(q);while(flag1!=0 & flag2!=0) if(p-date date ) head3=Insert(head3,p-date); p=p-next; flag1=IsLast(p); else head3=Insert(head3,q-date); q=q-next; flag2=IsLast(q); if(flag1!=0) while(flag1) head3=Insert(head3,p-date); p=p-next; flag1=IsLast(p); else while(flag2) head3=Insert(head3,q-date); q=q-next; flag2=IsLast(q); ShowList(head3-next,fp); fclose(fp);2. 数据转换(用栈实现将十进制转换为二进制)#include#includetypedef struct stack int date; struct stack *next; stack;int fulength=100,length=0;stack *top=NULL;int IsFull(int length);stack *Create();stack *Push(stack *top,stack *p);stack *Pop(stack *top);int IsEmpty(int length);stack *Create() stack *p; int flag; flag=IsFull(length); if(flag=1) printf(stack is full); return top; else p=(stack *)malloc(sizeof(stack) ; return p; /创建一个结构体,返回指向该结构体的指针 int IsFull(int length) if(length=fulength) return 1; else return 0; /设定一个常量为fulllength,当length=fulllength时,为满 返回1 /否则 返回0 int IsEmpty(int length) if(length=0) return 1; else return 0; /判断栈是否为空,若空则返回1,否则返回0 stack *Push(stack *p,stack *top) p-next=top; length+; return p; /将p指向的结构体,插入到top指向的结构体,返回新的top; stack *Pop(stack *top) length-; top=top-next; return top; /在链表中删除top指向的结构体,并且的指针为指向该结构体的下一个结构体 int main() int n,m; stack *p; while(1) printf(Please input the decimal number:); scanf(%d,&n); if(n0) p=Create(); m=n%2; n=n/2; p-date=m; top=Push(p,top); printf(The corresponding binary version is:) ; while(top!=NULL) printf(%d,top-date); top=Pop(top); printf(n); 3. 二叉树的中序遍历(非递归方式)+4.二叉树的层序遍历(构造图) #include#includetypedef struct btree char date; struct btree *plchild; struct btree *prchild;Btree;Btree *queue10;Btree *stack10;int qfront=-1,qrear=0;int top=0;int leaf;int lheight,rheight,height;Btree *CreateNode(char date) Btree *p; p=(Btree *)malloc(sizeof(Btree); p-date=date; p-plchild=p-prchild=NULL; return p; /创建一个结点,存放的数据为date;int qIsEmpty() if(qfront0 | qfront=qrear ) return 1; else return 0; / 判断队列是否为空void MakeEmpty() int i; qfront=-1;qrear=0; for(i=0;i=10) qrear=qrear%9; / 入队/没有考虑到队列满的情况Btree *DeQueue() Btree *q=NULL; if(qfront=10) qfront=qfront%9; return q; /出队void levelOrder(Btree *p) Btree *ptr; ptr=p; if(ptr=NULL) return; EnQueue(ptr); for(;) ptr=DeQueue(); if(ptr!=NULL) printf(%c,ptr-date);if(ptr-plchild!=NULL)EnQueue(ptr-plchild);if(ptr-prchild!=NULL)EnQueue(ptr-prchild); else break; /层序遍历void Leaf(Btree *p) if(p!=NULL) if(p-plchild=NULL & p-prchild=NULL) leaf+; Leaf(p-plchild);Leaf(p-prchild); int Height(Btree *p) if(p=NULL) return 0; else lheight=Height(p-plchild);rheight=Height(p-prchild);return(lheightrheight)?(lheight+1):(rheight+1); / 计算树的高度Btree *maketree() Btree *bt; char ch; scanf(%c,&ch); if(ch=#) bt=NULL; else bt=CreateNode(ch); bt-plchild=maketree(); bt-prchild=maketree(); return bt; /创建如何题目要求的树int IsFull() if(top=8) return 1; else return 0;/若栈满则返回1,否则返回0void Push(Btree *p)if(top=8) printf(栈满); return;stacktop+=p; / 入栈int IsEmpty()if(top=0) return 1;else return 0;/ 栈是否为空 Btree *Pop() Btree *p=NULL;if(IsEmpty() return p; p=stack-top; return p; /出栈void iterinorder(Btree *topNode) Btree *p; p=topNode; for(;) for(;p!=NULL;p=p-plchild)Push(p); p=Pop(); if(p=NULL) break; printf(%c,p-date); p=p-prchild; /用iterinorder实现中序遍历int main() Btree *topNode; topNode=maketree(); /创建题目要求的树 levelOrder(topNode); printf( 此为层序遍历(通过队列实现)n); iterinorder(topNode); printf( 此为中序遍历(iternative version方法)n); height=Height(topNode); /计算树的高度 Leaf(topNode); /计算叶子数目 printf(leaf=%d nheight=%dn,leaf,height);5.堆排序算法应用(一列无序数,用堆排序进行排序)#includevoid adjust(int a,int root,int n) int child ,rootdate; int temp; rootdate=aroot; child=2*root; while(child=n) if(childn & achildachild) break; else achild/2=achild; child=child*2;achild/2=rootdate; void headSort(int a,int n) int i,j; int temp; for(i=n/2;i0;i-) adjust(a,i,n); for(i=n-1;i0;i-) temp=ai+1,ai+1=a1,a1=temp; adjust(a,1,i); int main() int i;int a11=-1,26,5,77,1,61,11,59,15,48,19; headSort(a,10); for(i=1;i11;i+) printf(%d ,ai);6.归并排序(非递归)#includevoid MergeSort(int list,int n);void merge_pass(int list,int sorted,int n,int length);void merge(int list,int sorted,int i,int m,int n);void MergeSort(int list,int n) int length; int extra10; length=1; while(lengthn) merge_pass(list,extra,n,length); length=length*2; merge_pass(extra,list,n,length); length=length*2; void merge_pass(int list,int sorted,int n,int length) int iStartPos,j; for(iStartPos=0;iStartPosn-2*length;iStartPos=iStartPos+2*length) merge(list,sorted,iStartPos,iStartPos+length-1,iStartPos+2*length-1); if(iStartPos+lengthn) merge(list,sorted,iStartPos,iStartPos+length-1,n-1); else for(j=iStartPos;jn;j+) sortedj=listj; void merge(int list,int sorted,int i,int m,int n) int j,k,t; j=m+1; k=i; while( (i=m) & (j=n) ) if(listim) for(t=j;t=n;t+) sortedk+=listt; else for(t=i;t=m;t+) sortedk+=listt; int main() int i; int list10=26,5,77,1,61,11,59,15,48,19; MergeSort(list,10); for(i=0;i10;i+) printf(%5d,listi); 7.快速排序 #includevoid quickSort(int a,int left,int right) int pivot,i,j; int temp; if(leftright) i=left;j=right+1; pivot=aleft; do do i+;while(aipivot); if(i j) /交换i,j位置数据元素temp = ai;ai = aj;aj = temp; while(ij); aleft=aj; aj=pivot; for(i=0;i10;i+) printf(%5d,ai); printf(n); quickSort(a,left,j-1); quickSort(a,j+1,right); int main() int list=26,5,37,1,61,11,59,15,48,19; quickSort(list,0,9); 8.图的深度优先遍历+9.图的广度优先遍历 #include#includetypedef struct Gnode int i; Gnode *next;Gnode;Gnode *Adlist20; /邻接链表int cost2020; /costij,存放边的权值int visit20; /visiti=0,代表i节点未被访问int distance20;/ 最短路径typedef struct queue /队列元素 int t; struct queue *next;queue;queue *front,*rear; /队列头与队列尾void addq(int i) queue *q,*p; p=NULL; q=(queue *)malloc(sizeof(queue); q-t=i; q-next=NULL; if(front=NULL) front=rear=q; else p=front;while(p!=rear) p=p-next;p-next=q;rear=q; / 入队int deleteq() queue *q; q=front; if(front=NULL) printf(queue is empty n); return -1; front=front-next; return q-t; /出队void initial(int n) for(int i=0;in;i+) Adlisti=NULL; for(int j=0;jn;j+) costij=1000;/初始化邻接链表void creat(FILE *fp,int m) int v,e,p; Gnode *t,*q; for(int i=0;ii=e; q-next=NULL; if(Adlistv=NULL) Adlistv=q; else t=Adlistv; while(t-next!=NULL) t=t-next;t-next=q; costve=p; /构建邻接链表,和costij;void outputg(FILE *fp,int n) Gnode *t; for(int i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 戒烟考试题及答案
- 检验科传染病疫情报告制度、复检制度
- 急救理论知识模拟题(含参考答案)
- 生态系统韧性分析-洞察及研究
- 2025版实体店知识产权保护与纠纷处理合作协议书
- 2025年二手车维修保养及转让服务合同
- 2025版商铺租赁返租共享经济合作协议
- 2025年度电商用户增长与留存策略外包合同
- 2025版食堂设施设备维护保养服务协议
- 2025年远程医疗在偏远地区医疗服务中的公共卫生事件应对策略研究
- 教师薪酬与考核 新东方
- 联合国和区域性国际组织
- 人教版一年级上册数学全册教学课件(2022年12月修订)
- 国际贸易术语课件详解
- 兽医外科及产科学共83张课件
- 履带吊安装、拆除安全交底
- 2-2《大战中的插曲》课件28张-统编版高中语文选择性必修上册
- 《甘肃地理》完整版教学课件-整套教程电子讲义(最全最新)
- 《专题地图设计与编制实验》课程教学大纲
- DB37T 4010-2020 含阿胶的食品中阿胶含量的测定方法
- 《植物生理学》课件第五章+同化物的运输
评论
0/150
提交评论