waitwolf 2020-01-06
void Delete_e(SqList &L,ElemType e) {int i=0,j=L.length-1;//设置数组低、高端指针(下标)。 while(i<j) { while(i<j&&L.elem[i]!=e)i++; //若值不为e,右移指针。 while(i<j&&L.elem[j]==e){ j--; // L.length--; }//若右端元素为item,指针左移 if(i<=j){L.elem[i++]=L.elem[j--]; //L.length--; } L.length=i-1; } }
void Arrange(int A[],int n) //n个整数存于数组A中,本算法 {int i=0,j=n-1,x; //数组下标从0开始 while(i<j) {while(i<j && A[i]>0) i++; while(i<j && A[j]<0) j--; if(i<j) {x=A[i]; A[i++]=A[j]; A[j--]=x; } //交换A[i] 与A[j] } }//算法Arrange结束.
void DoubleBubbleSort(KeyType R[],int n) { int i,low=0,high=n-1; KeyType temp; bool exchange; while(low<high) { exchange=false; //从前往后进行一次冒泡排序,将最大的值放在最后一个位置 for(i=low;i<high;++i) { if(R[i]>R[i+1]) //如果前面的值比后面的值大,发生交换 { temp=R[i]; R[i]=R[i+1]; R[i+1]=temp; exchange=true; } } //从后往前进行一次冒泡排序,将最小的值放在第一个位置 for(i=high-1;i>low;--i) { if(R[i]<R[i-1]) //如果后面的值比前面的值小,发生交换 { temp=R[i]; R[i]=R[i-1]; R[i-1]=temp; exchange=true; } } if(!exchange) //本趟没有发生交换,提前终止 return; ++low; //更新上下边界 --high; } }
Status Maxelem_L(LinkList L,int &max) { if (L->next==NULL) return error else { LNode *p=L->next; max=p->data; p=p->next; while(p) { if(p->data>max) max=p->data; p=p->next; } } return ok; }
int GetMax(LinkList p) { if(!p->next) return p->data; else { int max=GetMax(p->next); return p->data>=max ? p->data:max; } }
void conversion ( int N,int k) { initstack ( S ); while ( N ) { push (S,N%k); N = N / k; } while ( ! Stackempty(s) ){ pop ( S,e ); if(e<=9) cout<<e; else cout<<char(e+55); } }//conversion }
void conversion(int n) { if(n==0) return ; else { conversion(n/8); cout<<n%8; } }
int Search_Bin(SSTable ST,KeyType key,int low,int high) { if(low<=high) { mid=(low+high)/2; if (key=ST.elem[mid].key) // 找到待查元素 return mid; else if LT(key,ST.elem[mid].key) return Search_Bin( ST, key,low,mid-1); else return Search_Bin( ST, key,mid+1,high); } else return 0; // 顺序表中不存在待查元素 }
BSTree Searchlev(BSTree T,char key,int &lev) { //在根指针T所指二叉排序树中递归地查找某关键字等于key的数据元素 //若查找成功,则返回指向该数据元素结点的指针和层次,否则返回空指针 if(T) { lev++; if( key==T->data.key) return T; //查找结束 else if (key<T->data.key) return Searchlev(T->lchild,key,lev); //在左子树中继续查找 else return Searchlev(T->rchild,key,lev); //在右子树中继续查找 } else return T; }
BSTree Searchlev(BSTree T,int key,int &lev){ BSTree p=T; while(p){ ++lev; if (key==p->data.key) return p; else if (key<p->data.key) p=p->lchild; //在左子树中继续查找 else p=p->rchild; //在右子树中继续查找 } return p; }
void count() { int i,num[36]; char ch; for (i=0;i<36;i++) num[i]=0; while ((ch=getchar())!='#') { if('0'<=ch&&ch<='9') { i=int(ch)-48; num[i]++;} else if('A'<=ch&&ch<='Z') {i=ch-65+10; num[i]++;} } for(i=0;i<10;i++) cout<<"数字"<<i<<"的个数"<<num[i]<<endl; for(i=10;i<36;i++) cout<<"字母"<<char(i+55)<<"的个数"<<num[i]<<endl; }
void StrAnalyze(SString S)//统计串S中字符的种类和个数 {char c; mytype T[20]; //用结构数组T存储统计结果 int i,j; for (i=0;i<=20;i++) T[i].ch='\0'; for(i=1;i<=S.length;i++) { c=S[i];j=0; while(T[j].ch&&T[j].ch!=c) j++; //查找当前字符c是否已记录过 if(T[j].ch) T[j].num++; else { T[j].ch=c;T[j].num++;} }//for for(j=0;T[j].ch;j++) cout<<T[j].ch<<":"<<T[j].num<<endl; }//StrAnalyze
void CreaTree(BTree &p,char c) //采用递归方式构造一棵二叉排序树 { if (p==NULL) //p为NULL,则建立一个新结点 { p=new tnode; p->ch=c; p->count=1; p->lchild=p->rchild=NULL; } else if (c==p->ch) p->count++; else if (c<p->ch) CreaTree(p->lchild,c); else CreaTree(p->rchild,c); }
void inverse(LinkList &L) { // 逆置带头结点的单链表 L p=L->next; L->next=NULL; while ( p) { q=p->next; // q指向*p的后继 p->next=L->next; L->next=p; // *p插入在头结点之后 p = q; } }
void LinkedListSelectSort(LinkedList head) //本算法一趟找出一个关键字最小的结点,其数据和当前结点进行交换; //若要交换指针,则须记下当前结点和最小结点的前驱指针 p=head->next; while(p!=NULL) { q=p->next; r->data=p->data; //设r是指向关键字最小的结点的指针 while (q!=NULL) { if(q->data<r->data) r->data=q->data; q=q->next; } if(r!=p) r->data<-->p->data;//这里表示交换这两个节点 p=p->next; }