考研数据结构算法经典.pdf
《考研数据结构算法经典.pdf》由会员分享,可在线阅读,更多相关《考研数据结构算法经典.pdf(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构算法背诵一、线性表1.逆转顺序表中的所有元素算法思想:第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,依此类推。void Reverse(int A,int n)(int i,t;for(i=0;i next;while(p!=NULL)if(p-data=item)q-next=p-next;free(p);p=q-next;else q=p;p=p-next;)if(list-data=item)q=list;list=list-next;free(q);)3.逆转线性链表void Reverse(LinkList&list)(LinkList p,q,r;p=lis
2、t;q=NULL;while(p!=NULL)r=q;q=p;p=p-next;q-next=r;list=q;4.复制线性链表(递归)LinkList Copy(LinkList lista)(LinkList listb;if(lista=NULL)return NULL;else listb=(LinkList)malloc(sizeof(LNode);listb-data=lista-data;listb-next=Copy(lista-next);return listb;)5.将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表LinkList MergeList(Link
3、List lista,LinkList listb)(LinkList listc,p=lista,q=listb,r;/listc指 向 lista和 listb所指结点中较小者if(lista-data data)listc=lista;r=lista;p=lista-next;else listc=listb;r=listb;q=listb-next;while(p!=NULL&q!=NULL)if(p-data data)r-next=p;r=p;p=p-next;else r-next=q;r=q;q=q-next;/将剩余结点(即未参加比较的且已按升序排列的结点)链接到整个链表后面
4、r-next=(p!=NULL)?p:q;return listc;二、树1.二叉树的先序遍历(非递归算法)算法思想:若P所指结点不为空,则访问该结点,然后将该结点的地址入栈,然后再将P指向其左孩子结点;若P所指向的结点为空,则从堆栈中退出栈顶元素(某个结点的地址),将P指向其右孩子结点。重复上述过程,直到p=NULL且堆栈为空,遍历结束。#define MAX_STACK 50void PreOrderTraverse(BTree T)(BTree STACKMAX_STACK,p=T;int top=-1;while(p!=NULLII top!=-l)while(p!=NULL)VISI
5、T(p);STACK+top=p;p=p-lchild;p=STACKtop-;p=p-rchild;)2.二叉树的中序遍历(非递归算法)算法思想:若P所指结点不为空,则将该结点的地址p入栈,然后再将P指向其左孩子结点;若P所指向的结点为空,则从堆栈中退出栈顶元素(某个结点的地址)送P,并访问该结点,然后再将p指向该结点的右孩子结点。重复上述过程,直到p=NULL且堆栈为空,遍历结束。#define MAX_STACK 50void InOrderTraverse(BTree T)BTree STACKMAX_STACK,p=T;int top=-1;while(p!=NULL II top!
6、=-l);(while(p!=NULL)(STACK+top=p;p=p-lchild;)p=STACKtop-;VISIT(p);p=p-rchild;3.二叉树的后序遍历(非递归算法)算法思想:当P 指向某一结点时,不能马上对它进行访问,而要先访问它的左子树,因而要将此结点的地址入栈;当其左子树访问完毕后,再次搜索到该结点时(该结点地址通过退栈得到),还不能对它进行访问,还需要先访问它的右子树,所以,再一次将该结点的地址入栈。只有当该结点的右子树访问完毕后回到该结点时,才能访问该结点。为了标明某结点是否可以访问,引入一个标志变量fla g,当flag=O时表示该结点暂不访问,flag=1
7、时表示该结点可以访问。flag的值随同该结点的地址一起入栈和出栈。因此,算法中设置了两个堆栈,其中STACK1存放结点的地址,STACK2存放标志变量fla g,两个堆栈使用同一栈顶指针to p,且top的初始值为.lo#define MAX_STACK 50void PostOrderTraverse(BTree T)BTree STACK1MAX_STACKJ,p=T;int STACK2MAX_STACK,flag,top=-1;while(p!=NULL II top!=-l)while(p!=NULL)STACKl+top=p;STACK2top=0;p=p-lchild;p=STA
8、CK 1 top;flag=STACK2top-;if(flag=0)STACKl+top=p;STACK2top=1;p=p-rchild;else VISIT(p);p=NULL;4.二叉树的按层次遍历算法思想:设置一个队列,首先将根结点(的地址)入队列,然后依次从队列中退出一个元素,每退出一个元素,先访问该元素所指的结点,然后依次将该结点的左孩子 结 点(若存在的话)和右孩子 结 点(若存在的话)入队列。如此重复下去,直到队列为空。#define MAX_QUEUE 50void LayeredOrderTraverse(BTree T)(BTree QUEUEMAX_QUEUE,p;i
9、nt front,rear;if(T!=NULL)(QUEUE0=T;front=-1;rear=0;while(front lchild!=NULL)QUEUE+rear=p-lchild;if(p-rchild!=NULL)QUEUE+rearJ=p-rchild;5.建立二叉树(从键盘输入数据,先序遍历递归算法)BTree CreateBT()char ch;BTree T;sacnf(%c,&ch);if(ch=)return NULL;else T=(BTree)malloc(sizeof(BTNode);T-data=ch;T-Ichild=CreateBT();T-rchild=
10、CreateBT();return T;6.建立二叉树(从数组获取数据)BTree CreateBT(int A,int i,int n)BTree p;if(i n)return NULL;else p=(BTree)malloc(sizeof(BTNode);p-data=Ai;p-lchild=CreateBT(A,2*i,n);p-rchild=CreateBT(A,2*i+l,n);return p;)T=CreateBT(A,1,n);BTree CreateBT(int A,int n)int i;BTree*pT;/对应n 个结点申请可容纳n 个指针变量的内存空间pT=(BTr
11、ee*)malloc(sizeof(BTree)*n);/若数组中的某个元素不等于零,则申请相应的结点空间并进行赋值for(i=l;i data=Ai;else pTi=NULL;修改结点的指针域的内容,使父结点指向左、右孩子结点for(i=l;i lchild=pT2*i;pTi-rchild=pT2*i+l;7.求二叉树的深度(递归算法)int Depth(BTree T)(int Idepth,rdepth;if(T=NULL)return 0;else Idepth=Depth(T-lchild);rdepth=Depth(T-rchild);if(Idepth rdepth)retu
12、rn ldepth+1;elsereturn rdepth+1;)8.求二叉树的深度(非递归算法)算法思想:对二叉树进行遍历,遍历过程中依次记录各个结点所处的层次数以及当前已经访问过的结点所处的最大层次数。每当访问到某个叶子结点时,将该叶子结点所处的层次数与最大层次数进行比较,若前者大于后者,则修改最大层次数为该叶子结点的层次数,否则不作修改。遍历结束时,所记录的最大层次数即为该二叉树的深度。本算法使用的是非递归的中序遍历算法(其它遍历顺序也可以)。#define MAX_STACK 50int Depth(BTree T)(BTree STACK 1MAX_STACK,p=T;int STA
13、CK2MAX_STACK;int curdepth,max depth=0,top=-1;if(T!=NULL)(curdepth=1;while(p!=NULL II top!=-)while(p!=NULL)(STACK 1 +top=p;STACK2top=curdepth;p=p-lchild;curdepth+;p=STACK 1 top;curdepth=STACK2top J;if(p-lchild=NULL&p-rchild=NULL)if(curdepth maxdepth)maxdepth=curdepth;p=p-rchild;curdepth+;)return maxd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考研 数据结构 算法 经典
限制150内