3.23Code

马肤
这是懒羊羊

 基于递归的折半查找

【注意】真的mid下标是begin+我想的mid!!!

#include
#define MAXSIZE 100
using namespace std;
void HalfSearch(int a[],int e,int begin,int end){
	if(endroot;
	if(root=='#'){
		T=NULL;
		return; 
	}
	T=new BiNode;
	T->data=root; 
	CreateTree(T->lchild);
	CreateTree(T->rchild); 
	
}
bool Check(BiTree T){
	if(T->lchild){
		if(T->datalchild->data)return false;
	}
	if(T->rchild){
		if(T->data>T->rchild->data)return false;
	}
	return true;
}
int main(){
	while(true){
		BiTree T;
		CreateTree(T);
		if(!T)break;
		if(Check(T))coutdata)return false;
	}
	if(T->rchild){
		if(T->data>T->rchild->data)return false;
	}
	return true;
}
void MidTraverse(BiTree T,int x,int &tag){
	if(T){
		BiTree p=T;
		if(p->datarchild,x,tag);
		}
		else if(p->data>=x){
			MidTraverse(p->lchild,x,tag);
			if(tag==1)coutn;
		if(n==0)break;
		BiTree T=NULL;
		int data;
		for(int i=0;i>data;
			CreateTree(T,data);
		}
	
		int x;
		cin>>x;
		int tag=0;
		MidTraverse(T,x,tag);
		coutdata;p->next=NULL;
		
		while(t->next)t=t->next;
		t->next=p;
		t=p;
	}
}
void GetLastK(LinkList L,int k){
	LinkList slow=L->next;
	LinkList fast=L->next;
	int cnt=0; //往后移动k步 
	while(cntnext;
	}
	while(fast){
		slow=slow->next;
		fast=fast->next;
	}
	coutnext=NULL;
		CreateList(L,n);
		int k;cin>>k;
		GetLastK(L,k);
		cin>>n;
	}
	return 0;
}

数组的循环左移(真·循环+左移....)

#include
using namespace std;
void MoveLeft(int *a,int len,int p){
	while(p!=0){
		p--;
		int tmp=a[0];
		for(int i=0;i>p;
		MoveLeft(a,n,p);
		ShowArray(a,n);
		cin>>n;
	}
	return 0;
}

数组的主元素查询

#include
using namespace std;
int FindMain(int *a,int n){
	//一共要进行n-1次 
	for(int i=0;irchild){
		//遇到了叶子结点
		 nowValue+=T->data*pathlen;
		 return;
	}
	if(T->lchild){
		pathlen++;
		WPL(T->lchild,nowValue,pathlen);
		pathlen--;
	}
	if(T->rchild){
		pathlen++;
		WPL(T->rchild,nowValue,pathlen);
		pathlen--;
	}
}
int main(){
	while(1){
		BiTree T;
		CreateTree(T);
		if(!T)break;
		int wpl=0;
		int len=0;
		WPL(T,wpl,len);
		coutnext;
		cnt++;
	}
	q->next=NULL;
	p->next=myL->next;
}

找出数组中和为目标值的两个数

#include
using namespace std;
#define MAXSIZE 100
void GetTwo(int a[],int n,int &p,int &q,int target){
	for(int i=0;in;
	while(n!=0){
		int a[n];
		for(int i=0;i>a[i];
		int target;
		cin>>target;
		int p,q;
		GetTwo(a,n,p,q,target);
		coutnext;
		t->next=p;
		t=p;
	}
}
bool IsEmpty(LinkList L){
	if(L->next==NULL) return true;
	else return false;
}
void PrintList(LinkList L){
	LinkList p=L->next;
	while(p){
		coutnext)coutnext;
		preSlow=preSlow->next;
		fast=fast->next;
	}
	preSlow->next=slow->next;
	if(IsEmpty(L))coutk;
		DeleteList(L,k);
		cin>>n;
	}
	return 0;
}

基于链表的两数之和

【总结】本题涉及了一个关于进位的事就是写成if 9XXX,不要害怕

#include
using namespace std;
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;
//头插法创建链表 
void CreateList(LinkList &L,int n){
	L=new LNode;
	L->next=NULL;
	LinkList t=L;
	for(int i=0;i>p->data;p->next=NULL;
		
		p->next=t->next;
		t->next=p; 
	}
	
}
bool IsEmpty(LinkList L){
	if(L->next==NULL) return true;
	else return false;
}
void PrintList(LinkList L){
	LinkList p=L->next;
	while(p){
		coutnext)coutdata+p2->data+c;
		if(sum>=10){
			sum-=10;
			c=1;
		} 
		else c=0;
		LinkList node=new LNode;
		node->data=sum;
		node->next=NULL;
		p3->next=node;
		p3=node;
		
		p1=p1->next;
		p2=p2->next;
	}
	if( p1 && p1->data==9 && c==1){
		LinkList node1=new LNode;
		node1->data=0;
		LinkList node2=new LNode;
		node2->data=1;
		node1->next=node2;
		node2->next=NULL;
		p3->next=node1;
	}
	else if( p2 &&p2->data==9 && c==1){
			LinkList node1=new LNode;
		node1->data=0;
		LinkList node2=new LNode;
		node2->data=1;
		node1->next=node2;
		node2->next=NULL;
		p3->next=node1;
	}
	else if(c==1){
		LinkList node=new LNode;
		node->data=1;
		node->next=NULL;
		p3->next=node;
	}
}
int main(){
	int m,n;
	cin>>m>>n;
	while(n!=0 && m!=0){
		LinkList L1;
		CreateList(L1,m);
		
		LinkList L2;
		CreateList(L2,n);
		
		LinkList myL;
		myL->next=NULL;
		
		Sum(L1,L2,myL);
		
		PrintList(myL);
		cin>>m>>n;
	}
	return 0;
}

交换链表中的两个结点

【注】有时候的交换其实就是值的交换,不用捣腾指针,而且注意更改指针后,后移不要盲目的想成p=p->next

#include
using namespace std;
typedef struct Lnode {
	int data;
	struct Lnode *next;
} Lnode, *Linklist;
void Init_Linklist(Linklist &l) {
	l = new Lnode;
	l->next = NULL;
}
void CreatLinklist(Linklist &l, int n) {
	Linklist p = l;
	Linklist r;
	for (int i = 1; i > r->data;
		r->next = p->next;
		p->next = r;
		p = r;
	}
}
void Exchange(Linklist &l) {
	Linklist p = l->next;
	while (p) {
		if(p->next != NULL){
			swap(p->data, p->next->data);
			p = p->next->next;
		}else{
			break;
		}
	}
}
void Out(Linklist &l) {
	Linklist p = l->next;
	while (p->next) {
		cout data next;
	}
	cout data > n;
		if (n == 0) break;
		Linklist l;
		Init_Linklist(l);
		CreatLinklist(l,n);
		Exchange(l);
		Out(l);
	}
	return 0;
}

链表的循环右移(这个没有要头结点。先成环,再去掉链接)

#include
using namespace std;
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;
//创建链表 
void CreateList(LinkList &L,int n){
	L=new LNode;
	L->next=NULL;
	cin>>L->data;
	LinkList t=L;
	for(int i=0;i>p->data;p->next=NULL;
		
		t->next=p;
		t=p; 
	}
	
}
void Move(LinkList &L,int k){
	LinkList cur=L;
	int cnt=1;
	while(cur->next){
		cur=cur->next;
		cnt++;
	}
	cur->next=L;
	int m=cnt-k%cnt;
	for(int i=0;inext;
	LinkList newp=cur->next;
	cur->next=NULL;
	L=newp; 
}
void PrintList(LinkList L){
	LinkList p=L;
	while(p){
		coutnext)cout>k;
		Move(L,k);
		PrintList(L);
		cin>>n;
	}
	return 0;
}

查找数组中缺失的数字

#include
using namespace std;
void FindNum(int a[],int n){
	int ans[n];
	for(int i=0;i

文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码