数据结构部分

  • 顺序有序存储的线性表,删除重复元素
/**顺序有序存储的线性表,删除重复元素*/
int purge(int a[], int n){
	int i,k=0;
	if(n>1){
		for(i=1; i<n; i++){
			if(a[i]!=a[k]){
				a[++k]=a[i];
			}
		
		}
		n=k+1;
	}
	return n;
}

 

  • 前序遍历,根左右的顺序,在进栈前访问
#define M 50
/*前序遍历,根左右的顺序,在进栈前访问*/
void preOrder(BTREE T)
{
	BTREE STACK[M],p=T;
	int top=-1;
	if(T!=NULL)
		do{
			while(p!=NULL){
				VISIT(p);/*访问当前节点*/
				STACK[++top]=p;/*进栈*/
				p=p->lchild;
			
			}
			p=STACK[top--];/*退栈*/
			p=p-rchild;
		}while(!(p==NULL && top==-1));
}
  • 中序遍历,左根右的顺序,在退栈后访问
#define M 50
/*中序遍历,左根右的顺序,在退栈后访问*/
void inOrder(BTREE T)
{
	BTREE STACK[M],p=T;
	int top=-1;
	if(T!=NULL)
		do{
			while(p!=NULL){
				STACK[++top]=p;/*进栈*/
				p=p->lchild;
			
			}
			p=STACK[top--];/*退栈*/
			VISIT(p);/*访问当前节点*/
			p=p-rchild;
		}while(!(p==NULL && top==-1));
}
  • 后序遍历,左右根的顺序,子节点优先于根节点,所以必须2次进栈,故用一个标识是否2次进栈
#define M 50
/**后序遍历,左右根的顺序,子节点优先于根节点,所以必须2次进栈,故用一个标识是否2次进栈*/
void postOrder(BTREE T)
{
	BTREE STACK1[M],p=T;
	int STACK2[M],flag,top=-1;
	if(T!=NULL){
		do{
			while(p!=NULL){
				STACK1[++top]=p;/*进栈*/
				STACK2[top]=0;
				p=p->lchild;
			
			}
			p=STACK1[top];/*退栈*/
			flag=STACK2[top--];
			if(flag==0){/*再次进栈,右节点访问后再访问根节点*/
				STACK1[++top]=p;
				STACK2[top]=1;
				p=p->rchild;
			}else{
				VISIT(p);
				p=NULL;
			}
		}while(!(p==NULL && top==-1));
	}
}
  • 层次遍历,使用队列,从上到下,从左到右
#define M 50
/*层次遍历,使用队列,从上到下,从左到右*/
void layerOrder(BTREE T){
	BTREE queue[M],p;
	int front,rear;
	if(T!=NULL){
		queue[0]=T;
		front=-1;
		rear=0;
		while(front<rear){
			p=queue[++front];
			visit(p);
			if(p->lchild!=NULL){
				queue[++rear]=p->lchild;
			}
			
			if(p->rchild!=NULL){
				queue[++rear]=p->rchild;
			}	
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值