数据结构期末考试复习--3
Posted ygjzs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构期末考试复习--3相关的知识,希望对你有一定的参考价值。
删除 L 中所有值为 item 的元素
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;
}
}
在有序表 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 (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;
}
统计串 S 中字符的种类和个数
void StrAnalyze(SString S)//统计串S中字符的种类和个数
{char c; mytype T[20]; //用结构数组T存储统计结果
int i,j;
for (i=0;i<=20;i++) T[i].ch='