删除 L 中所有值为 item 的元素
void Delete_e(SqList &L,ElemType e)
{int i=0,j=L.length-1;//设置数组低、高端指针(下标)。
while(i
将数组中所有正数排在所有负数的前面
void Arrange(int A[],int n)
//n个整数存于数组A中,本算法
{int i=0,j=n-1,x; //数组下标从0开始
while(i0) i++;
while(i
双冒泡
void DoubleBubbleSort(KeyType R[],int n)
{ int i,low=0,high=n-1;
KeyType temp;
bool exchange;
while(lowR[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]
求链表的最大数
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<
递归方法实现进制转换
void conversion(int n)
{
if(n==0) return ;
else
{
conversion(n/8);
cout<
在有序表 ST 中折半查找
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 (keydata.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 (keydata.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<<"数字"<
统计串 S 中字符的种类和个数
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<
应用二叉排序树分类统计
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 (cch)
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->datadata) r->data=q->data;
q=q->next;
}
if(r!=p) r->data<-->p->data;//这里表示交换这两个节点
p=p->next;
}