算法之有序表合并、二叉树遍历、图的遍历
2017-12-24 22:35
696 查看
今天考了数据结构,仍然有好多没有记住的常见算法,先来四个学着。
算法是计算机领域里,最不容易被时代淘汰的知识啦,觉得不仅仅是为着当前的考试,也是未来的发展。
1.有序表合并
2.二叉树的三种遍历
3.图的深度优先遍历
4.图的广度优先遍历
算法是计算机领域里,最不容易被时代淘汰的知识啦,觉得不仅仅是为着当前的考试,也是未来的发展。
1.有序表合并
int a[20]={6,13,17,21,41,65,73};//a[0]中存储数组中元素个数 int b[20]={5,20,31,32,47,55};//b[0]中存储数组中元素个数 int c[100];//c[0]中存储数组中元素个数 int i=1;j=1;k=0; while((i<=a[0])&&(j<=b[0])) { k++; if(a[i]<b[j]) { c[k]=a[i]; i++; }else { c[k]=b[j]; j++; } } while(i<=a[0]) { k++;c[k]=a[i];i++; } while(j<=b[0]) { k++;c[k]=b[j];j++; } c[0]=a[0]+b[0];
2.二叉树的三种遍历
//结点数据结构 typedef struct node { int data; struct node *l,*r; }tree *btree void pri1(btree t0)//先序 { if(t0) { printf("%d",t0->data); pri1(t0->l); pri1(t0->r); } } void pri2(btree t0)//中序 { if(t0) { pri2(t0->l); printf("%d",t0->data); pri2(t0->r); } } void pri3(btree t0)//后序 { if(t0) { pri3(t0->l); pri3(t0->r); printf("%d",t0->data); } }
3.图的深度优先遍历
main() { int i,j,n,top,k,s; int flag[20]={0};//标志,没访问的为0,访问过的为1 int stack[100]; int g[9][9]=//这里要手动输入图 scanf("%d",&s);//开始访问的结点 printf("%d",s); flag[s]=1,stack[0]=s;//将已访问的元素沉底 top=0; k=0; n=8;//8个顶点 while(top>=0)//回溯操作 { k++; if(k>n) { k=stack[top]; top--; }else if((falg[k]==0)&&(g[stack[top]][k])==1) { printf("%d",k); flag[k]=1; top++; stack[top]=k; k=0; } } }
4.图的广度优先遍历
main() { int i,j,s,n,front,rear,x; int flag[100]={0}; int q[100]; int g[9][9]=//图需要自己输入 scanf("%d",&s); q[1]=s; flag[s]=1; n=8; front=1;rear=1; while(front<=rear)//队非空 { x=q[front];front++ for(j=1;j<=n;j++) if((flag[j]==0)&&(g[x][j])==1) { falg[j]=1; rear++; q[rear]=j; } } for(i=1;i<=rear;i++) printf("%d",q[i]); getch(); }
相关文章推荐
- 经典算法学习——合并两个有序链表
- 基础算法(一) ———— 合并两个有序数组
- [小算法] 合并两有序链表
- 算法:两个有序链表的合并
- 数据结构 P31 算法实现 有序链表合并为有序链表
- 【算法】合并k个有序的链表-基于最小堆的思想
- 合并两个有序链表的算法
- 算法面试题:找出由两个有序列表合并而成的新列表中的第n个元素
- 1324:算法2-2:有序线性表的有序合并
- 算法--合并两个有序数组
- 有序数组合并 -- 算法小结
- 经典算法之两个有序单链表合并
- 1324: 算法2-2:有序线性表的有序合并
- 1324:算法2-2:有序线性表的有序合并
- js算法:分治法-归并排序之合并有序数组
- 算法学习----合并两个有序的链表
- 九章算法面试题5 有序数组合并
- 九章算法面试题82 合并有序链表
- 数据结构与算法(二)合并两个有序链表
- C++模板数组实现有序数组的排列合并算法