数据结构-基本功能函数-向量
来源:互联网 发布:蒙哥马利算法 编辑:程序博客网 时间:2024/04/29 21:21
//------------------------------------------------
//向量
int finsert_add(VECTOR array,int number,ElemType value)
{//将value按由小到大的顺序插入到向量array中,number指元素个数
int i,j;
for(i=0;i<number&&array[i]<value;i++);
for(j=number-1;j>=i;j--)array[j+1]=array[j];
array[i]=value;
return ++number;
}
int fsector_deletesame(VECTOR array,int number)
{//删除向量array中有多余相同值,number为元素个数
int i=0,j;
ElemType prevalue,value;
prevalue=array[0];
for(i=1;i<number;i++)
{
value=array[i];
if(prevalue==value)
{
for(j=i;j<number;j++)
array[j]=array[j+1];
array[number-1]=0;
--number;
--i;
}
else;
prevalue=value;
}
return number;
}
void fsector_split(VECTOR array1,int number1,VECTOR array2,int *number2,VECTOR array3,int *number3)
{//将array1中大于0的值放在array2,小于等于0的值放在array3
int i=0,j=0,k=0;
for(i=0;i<number1;i++)
if(array1[i]>0)
array2[j++]=array1[i];
else
array3[k++]=array1[i];
*number2=j;
*number3=k;
}
void fsector_exchange(VECTOR array,int first_local,int end_local)
{//将向量array中从first_local到end_local的元素倒叙
int i,j,mid,temp;
mid=(first_local+end_local)/2;
for(i=first_local,j=end_local;i<=mid;i++,j--)
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
void fsector_changeplace(VECTOR array1,int number2,int number3)
{//array1向量长度等于number2+number3,其中number2,number3分别为array2,array3的向量长度
//number3,number2分别存放前后array1数
fsector_exchange(array1,0,number3+number2-1);
fsector_exchange(array1,0,number2-1);
fsector_exchange(array1,number2,number3+number2-1);
}
//
int ffind_local(VECTOR array,ElemType value,int number)
{//折半查找法
int low=0,high=number-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(value>array[mid])low=mid+1;
else if(value==array[mid])return mid;
else
high=mid-1;
}
return ERROR;
}
int fdelete_value(VECTOR array,ElemType x,ElemType y,int number)
{//删除array中从 x到y的值(x<=y),number为array的元素个数
int local_x,local_y,k1,k2,i;
local_x=ffind_local(array,x,number);
local_y=ffind_local(array,y,number);
k2=number-local_y;
k1=local_y-local_x+1;
for(i=0;i<6;i++)
array[local_x+i]=array[++local_y];
array[++local_y]=0;
return number-k1;
}
void fcompositor(VECTOR array,int number)
{//对向量array按由大到小的顺序进行折半插入排序
int i,j;
int p1;
int low,high,mid;
for(i=1;i<number;i++)
{
p1=array[i];
low=0;
high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(p1<array[mid])high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=low;j--)
array[j+1]=array[j];
array[low]=p1;
}
}
void ffind_max_min(VECTOR array,ElemType max,ElemType min,int number)
{//查找最大最小值,并且平均比较次数小于3n/2
int i;
max=min=array[0];
for(i=1;i<number;i++)
if(array[i]>max)max=array[i];
else if(array[i]<min)min=array[i];
}
int fcompare_function(VECTOR array1,int number1,VECTOR array2,int number2)
{
int i,k=0;
for(i=0;i<number1&&i<number2&&array1[i]==array2[i];i++);
if(i==number1&&number1==number2)return 0;
else if(i==number1&&i<number2||i<number1&&i<number2&&array1[i]<array2[i])
return -1;
else
return 1;
}
int fcompostitute(VECTOR array1,int number1,VECTOR array2,int number2,VECTOR array3)
{//按由小到大的顺序合并两个由小到大排列的向量
int i,j;
int low=0,high,mid,local_old=0;
int p1=0;
for(i=0;i<number1;i++)
{
high=number2;
while(low<=high)
{
mid=(low+high)/2;
if(array1[i]<array2[mid])high=mid-1;
else
low=mid+1;
}
for(j=local_old;j<low;j++)
array3[p1++]=array2[j];
local_old=low;
array3[p1++]=array1[i];
}
for(;p1<number1+number2;p1++)array3[p1]=array2[local_old++];
return number1+number2;
}
//------------------------------------------------
//向量
int finsert_add(VECTOR array,int number,ElemType value)
{//将value按由小到大的顺序插入到向量array中,number指元素个数
int i,j;
for(i=0;i<number&&array[i]<value;i++);
for(j=number-1;j>=i;j--)array[j+1]=array[j];
array[i]=value;
return ++number;
}
int fsector_deletesame(VECTOR array,int number)
{//删除向量array中有多余相同值,number为元素个数
int i=0,j;
ElemType prevalue,value;
prevalue=array[0];
for(i=1;i<number;i++)
{
value=array[i];
if(prevalue==value)
{
for(j=i;j<number;j++)
array[j]=array[j+1];
array[number-1]=0;
--number;
--i;
}
else;
prevalue=value;
}
return number;
}
void fsector_split(VECTOR array1,int number1,VECTOR array2,int *number2,VECTOR array3,int *number3)
{//将array1中大于0的值放在array2,小于等于0的值放在array3
int i=0,j=0,k=0;
for(i=0;i<number1;i++)
if(array1[i]>0)
array2[j++]=array1[i];
else
array3[k++]=array1[i];
*number2=j;
*number3=k;
}
void fsector_exchange(VECTOR array,int first_local,int end_local)
{//将向量array中从first_local到end_local的元素倒叙
int i,j,mid,temp;
mid=(first_local+end_local)/2;
for(i=first_local,j=end_local;i<=mid;i++,j--)
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
void fsector_changeplace(VECTOR array1,int number2,int number3)
{//array1向量长度等于number2+number3,其中number2,number3分别为array2,array3的向量长度
//number3,number2分别存放前后array1数
fsector_exchange(array1,0,number3+number2-1);
fsector_exchange(array1,0,number2-1);
fsector_exchange(array1,number2,number3+number2-1);
}
//
int ffind_local(VECTOR array,ElemType value,int number)
{//折半查找法
int low=0,high=number-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(value>array[mid])low=mid+1;
else if(value==array[mid])return mid;
else
high=mid-1;
}
return ERROR;
}
int fdelete_value(VECTOR array,ElemType x,ElemType y,int number)
{//删除array中从 x到y的值(x<=y),number为array的元素个数
int local_x,local_y,k1,k2,i;
local_x=ffind_local(array,x,number);
local_y=ffind_local(array,y,number);
k2=number-local_y;
k1=local_y-local_x+1;
for(i=0;i<6;i++)
array[local_x+i]=array[++local_y];
array[++local_y]=0;
return number-k1;
}
void fcompositor(VECTOR array,int number)
{//对向量array按由大到小的顺序进行折半插入排序
int i,j;
int p1;
int low,high,mid;
for(i=1;i<number;i++)
{
p1=array[i];
low=0;
high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(p1<array[mid])high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=low;j--)
array[j+1]=array[j];
array[low]=p1;
}
}
void ffind_max_min(VECTOR array,ElemType max,ElemType min,int number)
{//查找最大最小值,并且平均比较次数小于3n/2
int i;
max=min=array[0];
for(i=1;i<number;i++)
if(array[i]>max)max=array[i];
else if(array[i]<min)min=array[i];
}
int fcompare_function(VECTOR array1,int number1,VECTOR array2,int number2)
{
int i,k=0;
for(i=0;i<number1&&i<number2&&array1[i]==array2[i];i++);
if(i==number1&&number1==number2)return 0;
else if(i==number1&&i<number2||i<number1&&i<number2&&array1[i]<array2[i])
return -1;
else
return 1;
}
int fcompostitute(VECTOR array1,int number1,VECTOR array2,int number2,VECTOR array3)
{//按由小到大的顺序合并两个由小到大排列的向量
int i,j;
int low=0,high,mid,local_old=0;
int p1=0;
for(i=0;i<number1;i++)
{
high=number2;
while(low<=high)
{
mid=(low+high)/2;
if(array1[i]<array2[mid])high=mid-1;
else
low=mid+1;
}
for(j=local_old;j<low;j++)
array3[p1++]=array2[j];
local_old=low;
array3[p1++]=array1[i];
}
for(;p1<number1+number2;p1++)array3[p1]=array2[local_old++];
return number1+number2;
}
//------------------------------------------------
- 数据结构-基本功能函数-向量
- 数据结构-基本功能函数-栈
- 数据结构-基本功能函数-链表
- 数据结构--向量--向量介绍
- 数据结构-向量
- 数据结构--向量
- 数据结构--向量
- 基本功能函数 BaseFun.h
- python--函数基本功能
- 整理NLPIR基本功能函数
- Stata基本功能及其函数实现
- 数据结构--顺序表基本功能实现程序…
- 数据结构--顺序栈基本功能实现程序…
- 数据结构--单链表基本功能实现程序…
- 数据结构之栈的基本功能实现
- 数据结构(10):二叉树基本功能的实现
- 数据结构之单链表基本功能的实现
- 数据结构之顺序表基本功能实现
- 2007-5-1今天我不爽
- Matlab排序函数
- 在网上看到的学习C++的建议(个人觉得说得不错)
- oracle 学习(四)
- 个人对C++运算符重载返回类型的认识
- 数据结构-基本功能函数-向量
- 数据结构-基本功能函数-栈
- 嵌入式CGI开发
- 数据结构-基本功能函数-链表
- contract配置问题
- jsp向数据库中添加日期
- JSP和JSF合并 共同打造完美的Web应用
- sql server日期时间函数
- Asp.Net细节性问题技巧精萃